Meta search over the AutoTempest sources: Cars.com (cm), Carvana (cv), CarGurus and others (ot), eBay Motors (eb), Hemmings (hem), TrueCar (te) and Cars & Bids (cs). Use make and model slugs from /makes and /models and a US ZIP or Canadian postal code. Every source is queried for the first page; data.sources shows the row count per source, including sources that have no match (count 0). Pass data.next_cursor as cursor to fetch the next page of the sources that still have rows. next_cursor is absent when every source is done. A valid search with no match returns an empty results array, which is a successful, billable response. Prices are in USD (CAD for Canadian listings); distance is in miles.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
2 required parameters needed before sending a request.
15 optional filters available.
string
Required
Make slug from /makes, for example toyota.
toyota
string
Required
US ZIP code or Canadian postal code, for example 90210.
90210
string
Optional
Model slug from /models, for example camry. Omit to search every model of the make.
camry
string
Optional
Search radius in miles: 25, 50, 100, 200, 300, 500, 1000 or any. Defaults to 50.
50
string
Optional
Comma-separated source codes: te, hem, cs, cv, cm, eb, ot. Defaults to all seven.
cm
string
Optional
best_match, date_desc, date_asc, dist_asc, year_asc, year_desc, price_asc, price_desc, miles_asc or miles_desc. Defaults to best_match.
relevance
integer
Optional
Rows per source and page, 1 to 100. Defaults to 50.
10
integer
Optional
Minimum price in USD.
10
integer
Optional
Maximum price in USD.
10
integer
Optional
Oldest model year.
10
integer
Optional
Newest model year.
10
integer
Optional
Minimum mileage.
10
integer
Optional
Maximum mileage.
10
string
Optional
4wd, awd, fwd or rwd.
example
string
Optional
diesel, electric, flex, gas, hybrid, hydrogen or ngv.
example
string
Optional
convertible, coupe, hatchback, minivan, sedan, suv, truck, van or wagon.
example
string
Optional
The data.next_cursor value of the previous response.
0
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: YOUR_API_KEY_HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
<?php
use Illuminate\Support\Facades\Http;
$response = Http::timeout(30)
->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
->get('https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10');
if ($response->successful()) {
echo $response->body();
} else {
echo "Error: " . $response->status();
}
const options = {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE'
}
};
fetch('https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10', options)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.text();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
const axios = require('axios');
const options = {
method: 'GET',
url: 'https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10',
headers: {
x-api-key: 'YOUR_API_KEY_HERE',
}
};
try {
const response = await axios(options);
console.log(response.data);
} catch (error) {
console.error('Error:', error.message);
}
require 'net/http'
require 'uri'
uri = URI.parse("https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'
begin
response = http.request(request)
puts response.body
rescue => e
puts "Error: #{e.message}"
end
import http.client
import json
conn = http.client.HTTPSConnection("scrappa.co")
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
conn.request("GET", "/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
import requests
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
response = requests.get('https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10', headers=headers)
response.raise_for_status()
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class ApiExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10")
.addHeader("x-api-key", "YOUR_API_KEY_HERE")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.out.println("Error: " + response.code());
}
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10", nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
#!/bin/bash
curl -X GET \
-H "x-api-key: YOUR_API_KEY_HERE" \
"https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10"
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");
try
{
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
import axios from 'axios';
async function run(): Promise<void> {
try {
const response = await axios({
method: 'GET',
url: 'https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE',
},
});
console.log(response.data);
} catch (error) {
console.error('Error:', error);
}
}
void run();
use reqwest::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let response = client
.get("https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10")
.header("x-api-key", "YOUR_API_KEY_HERE")
.send()
.await?;
println!("{}", response.text().await?);
Ok(())
}
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
success
data
meta
{
"success": true,
"data": {
"query": {
"make": "toyota",
"model": "camry",
"zip": "90210",
"radius": 50
},
"sources": {
"cm": {
"count": 10,
"has_more": true
}
},
"results": [
{
"id": "cm-0ad626bc-1b4e-445c-b4bb-381e5e160511",
"source": "cm",
"source_name": "Cars.com",
"title": "2026 Toyota Camry LE",
"year": 2026,
"make": "Toyota",
"model": "Camry",
"trim": "LE",
"price": 30110,
"currency": "USD",
"mileage": 1239,
"vin": "4T1DAACK2TU904894",
"location": "Huntington Beach, CA",
"postal_code": "92648",
"country": "US",
"distance_miles": 37.4,
"seller_type": "Dealer",
"dealer_name": "Toyota Of Huntington Beach",
"listed_at": "2026-10-15T07:00:00Z",
"url": "https://www.cars.com/vehicledetail/0ad626bc-1b4e-445c-b4bb-381e5e160511/",
"title_status": "Clean"
}
],
"next_cursor": "eyJjbSI6WzEsMSwwLDAsODBdfQ"
},
"meta": {
"endpoint_family": "search",
"billable": true
}
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Not Found
The make is unknown (models). This response is not billable.
Validation Error
A public parameter is invalid, or AutoTempest rejected it (for example an unknown ZIP code). This response is not billable.
Service Unavailable
The service could not obtain a complete result from AutoTempest. This response is not billable.
Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Try It Live
Test this endpoint in our interactive playground with real data.