Skip to content
Scrappa Get API key
AutoTempest API 1 credit/request

AutoTempest Search API Documentation

GET https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10

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.

AutoTempest Search API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/autotempest/search?make=toyota&model=camry&zip=90210&radius=50&sources=cm&per_page=10
Auth header
x-api-key
Cost
1 credit/request
make = toyota zip = 90210
Response preview
200 OK
{
    "success": true,
    "data": {
        "query": {
            "make": "toyota",
            "model": "camry",
            "zip": "90210",
            "radius": 50
        },
        "sources": {
            "cm": {
                "count": 10,
                "has_more": true
            }
...

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.

make string Required

Make slug from /makes, for example toyota.

Example value toyota
zip string Required

US ZIP code or Canadian postal code, for example 90210.

Example value 90210
model string Optional

Model slug from /models, for example camry. Omit to search every model of the make.

Example value camry
radius string Optional

Search radius in miles: 25, 50, 100, 200, 300, 500, 1000 or any. Defaults to 50.

Example value 50
sources string Optional

Comma-separated source codes: te, hem, cs, cv, cm, eb, ot. Defaults to all seven.

Example value cm
sort 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.

Example value relevance
per_page integer Optional

Rows per source and page, 1 to 100. Defaults to 50.

Example value 10
min_price integer Optional

Minimum price in USD.

Example value 10
max_price integer Optional

Maximum price in USD.

Example value 10
min_year integer Optional

Oldest model year.

Example value 10
max_year integer Optional

Newest model year.

Example value 10
min_miles integer Optional

Minimum mileage.

Example value 10
max_miles integer Optional

Maximum mileage.

Example value 10
drive string Optional

4wd, awd, fwd or rwd.

Example value example
fuel string Optional

diesel, electric, flex, gas, hybrid, hydrogen or ngv.

Example value example
body_style string Optional

convertible, coupe, hatchback, minivan, sedan, suv, truck, van or wagon.

Example value example
cursor string Optional

The data.next_cursor value of the previous response.

Example value 0

Request Examples

PHP
<?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
<?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();
}
JavaScript
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));
JavaScript
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);
}
Ruby
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
Python
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()
Python
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}")
Java
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());
        }
    }
}
Go
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))
}
Terminal
#!/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"
C#
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}");
        }
    }
}
TypeScript
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();
RUST
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
JSON Response
200 OK
{
    "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.