Inventory Search

Search active dealer listings currently for sale in US and Canadian markets with comprehensive filtering, sorting, analytics, and geographic targeting capabilities.

The Inventory Search API provides near-real-time access to one of the largest active dealer inventories in the U.S. and Canada, refreshed daily. Its rich filtering, sorting, and analytics capabilities let dealers, lenders, and analysts search current stock and derive market insights quickly.

Overview

  • Access a comprehensive inventory of more than 6 million unique vehicles—deduplicated (Understanding Attribution) from over 16 million active dealer listings across the U.S. and Canada.
  • All listings have seller_type set to dealer, ensuring completeness and reliability for dealer-focused searches.
  • Data updates published daily on or before 11 AM UTC

Units & Conventions:

Field / PatternUnitNotes
price, msrpUSD (US), CAD (CA)Applies to all price-like currency fields
miles, radius, distMilesApplies to both markets in request as well as response
*_atUnix epoch seconds (UTC)Applies to all timestamp fields (e.g. last_seen_at)
*_at_dateISO-8601 YYYY-MM-DDThh:mm:ssZ (UTC)Same instant as the matching *_at field
city_mpg, highway_mpgMiles per GallonApplies to both markets

Base Path

GET https://api.marketcheck.com/v2/search/car/active

The following example demonstrates a basic search request with common parameters:

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
year: '2024',
make: 'ford',
model: 'f-150',
start: '0',
rows: '5',
facets: 'trim',
stats: 'price'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Explore the full range of parameters available for filtering, sorting, and configuring search results in the Parameters section below.

Request

The Inventory Search API provides extensive filtering and search capabilities for automotive inventory listings. You can search by vehicle specifications, geographic location, pricing ranges, dealer types, and numerous other criteria to find the exact vehicles you need.

Parameters

Available parameters for filtering, sorting, and configuring search results:

109 Params
api_key
string required

Your MarketCheck API authentication key. Required for every request, unless OAuth is used.

append_api_key
boolean

If true, the response URLs (such as cached images & relevant links) include the api_key query parameter along with value; if false, they do not. Default — true.

base_ext_color
string

The base exterior color to filter results by (e.g. White, Black, Blue, Silver, Red). Accepts multiple colors as a comma-separated list.

base_int_color
string

The base interior color to filter results by (e.g. Black, Brown, Beige, Red). Accepts multiple colors as a comma-separated list.

body_subtype
string

Filters listings by body subtype (e.g., Crew, Extended, Regular, Extended Crew). Accepts multiple values separated by commas.

body_type
string

Filters listings by body type (e.g., SUV, Pickup, Sedan, Hatchback, Convertible). Accepts multiple values separated by commas.

car_type
string

Filters listings by inventory type. Allowed values - new, used, certified.

carfax_1_owner
boolean

If true, returns only vehicles with a single previous owner; if false or omitted, no ownership filter is applied. Default — false.

carfax_clean_title
boolean

If true, returns only vehicles with a clean title history; if false or omitted, no title filter is applied. Default — false.

city
string

Filters listings by city name (e.g. Los Angeles, San Francisco, Houston).

city_mpg_range
string

Filters listings by city fuel-economy mileage. Specify as min-max MPG (e.g., 20-35).

country
string

Filters listings by country code. Allowed values - us, ca, all. Default — us.

cylinders
string

Filters listings by engine cylinder count (e.g., 4, 6, 8). Accepts multiple values as a comma-separated list.

dealer_type
string

Filters dealers by type. Allowed values — franchise, independent.

dedup
boolean

If true, returns only is_searchable listings irrespective of dealer_id, mc_website_id, or source. Default — false. See nodedup for the opposite behavior.

dom_180_range
string

Filters listings by Days on Market observed over the last 180 days. Specify as min-max days (e.g., 10-50).

dom_active_range
string

Filters listings by active Days on Market (DOM). Specify as min-max days.

dom_range
string

Filters listings by total Days on Market (DOM). Specify as min-max days.

doors
string

Filters listings by number of doors (e.g., 2, 4). Accepts multiple values as comma-separated list.

dos_active_range
string

Filters listings by active Days on Site (DOS). Specify as min-max days.

drivetrain
string

Filters listings by drivetrain (FWD, RWD, 4WD). Accepts multiple values separated by commas.

engine
string

Filters listings by engine designation (e.g., 2.0L I4, 3.5L V6, 2.5L H4). Accepts multiple values as comma-separated list.

engine_aspiration
string

Filters listings by engine aspiration (Turbocharged, Naturally Aspirated, etc.). Accepts multiple values separated by commas.

engine_block
string

Filters listings by engine block layout (V, I, H). Accepts multiple values separated by commas.

engine_size
string

Filters listings by engine displacement size (e.g., 2.0, 2.5, 3.5). Accepts multiple values separated by commas.

engine_size_range
string

Filters listings by engine displacement size. Specify as min-max liters (e.g., 1.5-3.0).

exclude_certified
boolean

If true, excludes certified-pre-owned vehicles from results. Default — false. See car_type parameter for filtering by inventory type for certified vehicles.

exclude_dealer_ids
string

Excludes results from the specified dealer IDs. Accepts multiple values as a comma-separated list.

exclude_high_value_features
string

Excludes listings that contain any of the specified High-Value Features (HVFs). Accepts comma-separated HVFs.

exclude_make
string

Excludes the specified makes. Accepts multiple values as a comma-separated list.

exclude_mc_website_ids
string

Excludes results from the specified MarketCheck website IDs. Accepts multiple values as comma-separated list.

exclude_options_packages
string

Excludes listings containing the specified Options Packages (OPs). Accepts multiple values as comma-separated list.

exclude_sources
string

Excludes listings from the specified sources (e.g., autonation.com, carmax.com). Accepts multiple values as comma-separated list.

exterior_color
string

Filters listings by exterior color (e.g. White, Summit White, Gun Metallic). Accepts multiple values as comma-separated list.

facet_sort
string

Sorts facet buckets. Allowed values — count (descending count, default) or index (alphabetical).

facets
string

Field name to return bucket facets for. Accepts multiple fields as a comma-separated list.

finance_down_payment
string

Filters listings by finance down-payment amount in USD. Specify a single value or a min-max range.

finance_down_payment_per
string

Filters listings by finance down-payment percentage. Specify a single value or min-max.

finance_emp
string

Filters listings by finance Estimated Monthly Payment (EMP) in USD. Specify a single value or min-max.

finance_loan_apr
string

Filters listings by finance loan APR. Specify a single value or min-max.

finance_loan_term
string

Filters listings by finance loan term in months. Specify a single value or min-max months.

first_seen_at_mc_days
string

Filters listings by the number of days since they were first seen by MarketCheck. Specify as min-max days. Alternative of first_seen_at_mc_range.

first_seen_at_mc_range
string

Filters listings by the date they were first seen by MarketCheck. Specify as YYYYMMDD-YYYYMMDD (e.g., 20220523-20220631). Alternative of first_seen_at_mc_days.

first_seen_at_source_days
string

Filters listings by the number of days since first seen on the source site. Specify as min-max days. Alternative of first_seen_at_source_range.

first_seen_at_source_range
string

Filters listings by date first seen on the source site. Specify as YYYYMMDD-YYYYMMDD. Alternative of first_seen_at_source_days.

first_seen_days
string

Filters listings by the number of days since they were first seen in MarketCheck inventory. Specify as min-max days. Alternative of first_seen_range.

first_seen_range
string

Filters listings by the first seen date. Specify as YYYYMMDD-YYYYMMDD (e.g., 20220523-20220631). Alternative of first_seen_days.

fuel_type
string

Filters listings by fuel type (e.g., Unleaded, Diesel, Electric, Premium Unleaded, Electric / Unleaded). Accepts multiple values separated by commas.

high_value_features
string

Filters listings that include all specified High-Value Features (HVFs). Provide HVFs as a comma-separated list.

highway_mpg_range
string

Filters listings by highway fuel-economy mileage. Specify as min-max MPG (e.g., 25-40).

in_transit
boolean

If true, returns listings marked as in transit; if false or omitted, no in-transit filter is applied.

include_finance
boolean

If true, only listings with finance offers are returned. Default — false.

include_lease
boolean

If true, only listings with lease offers are returned. Default — false.

include_non_vin_listings
boolean

If true, includes listings without a VIN; if false, such listings are excluded. Default — false.

include_preferred_dealer_flag
boolean

If true, adds a preferred_dealer flag to listings when they match client-specific filters. Default — false.

include_relevant_links
boolean

If true, includes relevant links to other MarketCheck API endpoints in the response. Default — false.

interior_color
string

Filters listings by interior color. Accepts multiple values as comma-separated list.

inventory_count_range
string

Filters dealers by total listing count. Specify as min-max listings (e.g., 10-100).

last_seen_days
string

Filters listings by the number of days since last seen. Specify as min-max days. Alternative of last_seen_at_range.

last_seen_range
string

Filters listings by last seen date. Specify as YYYYMMDD-YYYYMMDD (e.g., 20220523-20220631). Alternative of last_seen_at_days.

latitude
float

Latitude component of the search location (decimal degrees). Used for geospatial queries along with longitude and radius parameters.

lease_down_payment
string

Filters listings by lease down-payment amount in USD. Specify a single value or min-max.

lease_emp
string

Filters listings by lease Estimated Monthly Payment (EMP) in USD. Specify a single value or min-max.

lease_term
string

Filters listings by lease term length in months. Specify a single value or min-max.

longitude
float

Longitude component of the search location (decimal degrees). Used for geospatial queries along with latitude and radius parameters.

make
string

Filters listings by vehicle make (e.g., Toyota, Ford, Mercedes-Benz). Accepts multiple values as comma-separated list.

match
string

Comma-separated list of field names for exact matching in combination with vins. Allowed values — year,make,model or year,make,model,trim.

miles_range
string

Filters listings by odometer reading. Specify as min-max miles (e.g., 1000-50000).

min_photo_links
integer

Filters listings with at least the specified number of photo links (e.g. 3, 8).

min_photo_links_cached
integer

Filters listings with at least the specified number of cached photo links (e.g. 3, 8).

mm
string

Make-Model composite string from the auto-complete API. Pass the value exactly as returned (e.g., toyota|camry).

model
string

Filters listings by specific vehicle model (e.g., Camry). Accepts multiple values separated by commas.

msa_code
string

Filters listings by Metropolitan Statistical Area (MSA) code.

msrp_range
string

Filters listings by Manufacturer's Suggested Retail Price (MSRP). Specify as min-max USD (e.g., 20000-45000).

nodedup
boolean

If true, returns all duplicate listings for a VIN; if false (default), duplicate listings are removed. This is the opposite of dedup.

options_packages
string

Filters listings by Options Packages (OPs). Provide a comma-separated list; results include listings containing all specified OPs.

owned
boolean

When used with dealer_id, mc_website_id, or source, true returns listings actually owned by that dealer. Default — false.

photo_links
boolean

If true, returns only listings that contain at least one photo link. Default — false.

photo_links_cached
boolean

If true, returns only listings that contain cached photo links. Default — false.

plot
boolean

If true, returns up to 1000 listings for plotting instead of full listing details.

powertrain_type
string

Filters listings by powertrain type (e.g., Combustion, BEV, HEV, MHEV, PHEV). Accepts multiple values separated by commas.

preferred_dealers
boolean

If true, flags listings in response from preferred dealers based on client scoring. Default — false.

preferred_dealers_only
boolean

If true, returns listings only from preferred dealers. Default — false.

price_change
string

Filters listings by positive or negative price-change flag (e.g., positive, negative). Accepts multiple comma-separated values.

price_change_range
string

Filters listings by the price change in USD. Since price changes can be positive or negative, specify as min|max (e.g., -5000|1000). This is a range filter.

price_range
string

Filters listings by advertised price in USD. Specify as min-max (e.g., 1000-50000).

radius
integer

Search radius around the specified location in miles. Used with zip or latitude and longitude for geospatial queries.

range_facets
string

Comma-separated list of numeric field names for which to return range facets in the response.

rows
integer

Number of results to return per request. Default — 10. Maximum — 50.

seating_capacity
string

Filters listings by seating capacity (e.g., 2, 5, 7). Accepts multiple values separated by commas.

sort_by
string

Field to sort results by. If omitted, defaults to distance when a location filter is used.

sort_order
string

Specifies result sort order. Allowed values — asc or desc. Default — asc.

start
integer

Pagination offset (0-based). Default — 0. Maximum page is limited to 10,000/rows.

state
string

Filters listings by US or Canadian state/province code (e.g., CA, NY, ON). Accepts multiple codes separated by commas.

stats
string

Comma-separated list of numeric fields for which to return aggregate statistics (mean, max, min, count).

stock_no
string

Filters listings by dealer stock number.

taxonomy_vins
string

Comma-separated list of 10-character “squish” VINs (first 8 + 10th & 11th chars). Filters listings by build.

transmission
string

Filters listings by transmission type (Automatic, Manual, etc.). Accepts multiple values separated by commas.

trim
string

Filters listings by vehicle trim (e.g., EX, Limited). Accepts multiple values separated by commas.

vdp_url
string

Filters listings by Vehicle Detail Page (VDP) URL match.

vehicle_type
string

Filters listings by vehicle type (Truck, Car). Accepts multiple values separated by commas.

version
string

Filters listings by vehicle version name.

vin
string

Filters listings by full 17-character Vehicle Identification Number (VIN).

vins
string

The VINs to find similar cars around. Accepts a comma-separated list of VINs. Used in conjunction with the match parameter always. Similar parameters are ymmt and taxonomy_vins.

year
string

Filters listings by model year (e.g., 2020). Accepts multiple years separated by commas.

year_range
string

Filters listings by model year range. Specify as min-max (e.g., 2015-2025).

ymm
string

Year-Make-Model composite string from auto-completion (e.g., 2019|Toyota|Camry).

ymmt
string

Year-Make-Model-Trim composite string(s). Each combo uses pipe separators and combinations can be comma-separated. For example, 2019|Toyota|Camry|LE,2020|Honda|Civic|EX. Useful for finding multiple groups of similar cars. Alternatively, you can use vins or taxonomy_vins for VIN-based queries.

zip
string

Filters listings within the specified 5-digit ZIP code.

Defaults

  • country: Defaults to us for United States market
    • When searching Canadian data, explicitly pass country=ca in each call
    • To search both US and Canadian data, use country=all
  • dedup: Defaults to true - only Attributed (Searchable) listings appear in responses
    • Only one listing per VIN is returned, removing duplicates from the dataset
    • use nodedup=true to include all listings, even duplicates

Pagination

API response includes num_found property indicating the total number of listings matching the search criteria. By default, the API returns the first page of results with 10 listings per page.

You can use start and rows parameters to iterate through search results efficiently.

Parameters:

  • start - Offset from which listings are returned (starts at 0)
  • rows - Number of listings per page (maximum 50, default 10)

Increment start proportionally to rows value for consistent pagination:

  • start=0&rows=50 - fetches listings 1-50
  • start=50&rows=50 - fetches listings 51-100
  • start=100&rows=50 - fetches listings 101-150

Limits:

  • The rows parameter accepts a maximum value of 50 (default is 10)
    • If you specify rows greater than 50, the API will automatically use the default value of 10
    • If you're on last page of results, the API will return remaining listings, which may be fewer than the requested rows
  • Your subscription package limits the total number of results you can paginate through; exceeding this limit returns an error.
  • If the sum of start and rows exceeds your subscription's pagination limit, or if start is greater than the total number of available results (num_found), the API will respond with a HTTP 422 error status.
Deep pagination can negatively impact performance and response times. For large-scale data extraction, consider using data feeds instead of paginating through extensive result sets.

Sorting

The Search API allows sorting results by a single numeric or date field at a time. Sorting by multiple fields simultaneously is not supported.

Sort Parameters:

  • sort_by - Field name to sort by
  • sort_order - Sort direction (asc or desc)

Default Behavior:

  • With location: sorts by distance (nearest first)
  • Without location: sorts by last_seen (desc) and vin (asc)

Common Sort Fields

Below are the most commonly used sort fields. For a complete list, see the next table.

Field Namesort_byData TypeDefault OrderDescription
DistancedistNumericascApplied by default for geo spatial requests
PricepriceNumericascSort listings by price
MilesmilesNumericascSort listings by mileage
DOSdos_activeNumericascSort listings by Days on site
Last Seenlast_seenDateascSort listings by last seen date

All Available Sort Fields

Field Namesort_byData TypeDefault OrderDescription
MSRPmsrpNumericascSort listings by MSRP
First Seenfirst_seenDateascSort listings by first seen date
DOM Activedom_activeNumericascSort listings by DOM Active
DOM 180dom_180NumericascSort listings by DOM 180
DOMdomNumericascSort listings by DOM lifetime
Highway MPGhighway_mpgNumericascSort listings by highway mileage
City MPGcity_mpgNumericascSort listings by city mileage
Lease Termlease_termNumericascSort listings by lease term
Lease EMPlease_empNumericascSort listings by lease EMP
Lease Down Paymentlease_down_paymentNumericascSort listings by lease down payment
Finance Loan Termfinance_loan_termNumericascSort listings by finance loan term
Finance Loan APRfinance_loan_aprNumericascSort listings by Finance Loan APR
Finance EMPfinance_empNumericascSort listings by Finance EMP
Finance Down Paymentfinance_down_paymentNumericascSort listings by Finance Down Payment
Price Change Percentageprice_change_percentNumericascSort listings by price change percentage
Sorting fails silently with incorrect sort_by values. Results return with default sorting when invalid sort fields are specified.

Facets

The Search API supports facets for building UI filters and analyzing inventory distribution. Use facets to get unique value counts for categorical fields and range-based counts for numeric fields.

Field Facets

Field facets return unique terms and their counts for categorical data, useful for building search filters and understanding inventory distribution.

Parameters and Syntax

  • facets — Comma-separated list of field names to facet on. Supports pagination and minimum count:
    facets=field_name|offset|limit|min_count
    • offset (default: 0): Start position for terms
    • limit (default: 20, max: 1000): Number of terms to return
    • min_count (optional): Minimum count for a term to be included
    • Example: facets=make|0|60|2 returns top 60 makes with at least 2 listings each
  • facet_sort — Controls sort order of facet terms:
    • count (default): Sort by frequency (highest first)
    • index: Sort alphabetically
Properly encode facet parameters in your HTTP requests to avoid issues with the pipe (|) character, which is used to separate positional parameters. For example, use %7C for | in URLs.

Example

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
year: '2024',
make: 'ford',
model: 'f-150',
rows: '0',
facets: 'trim|0|100|0,city|0|100|100'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
Use min_count parameter to filter out terms with low frequencies for cleaner results, like we've done in the example above for city facet with min_count of 100. This ensures only cities with significant listings are returned.

Response

  • Facets are returned in the facets field of the response, structured as key-value pairs
  • Keys are field names and values are arrays of objects with item and count properties
    • item is the unique term
    • count is the number of listings for that term.
{
"facets": {
    "make": [
    { "item": "Toyota", "count": 12345 },
    { "item": "Honda", "count": 6789 },
    ...
    ],
    "city": [
    { "item": "Los Angeles", "count": 1000 },
    { "item": "New York", "count": 800 },
    ...
    ]
}
}

If requested field is not allowed for faceting, it will be included in the response but with an error message indicating the field is not supported for facets.

{
  "facets": {
    "xyz": [
      {
        "result": "Error",
        "message": "Field xyz is not allowed in facets"
      }
    ]
  }
}

Available Field Facets

FieldDescription
base_ext_colorBase exterior color
base_int_colorBase interior color
body_subtypeDetailed body variant
body_typeMain body classification
carfax_1_ownerSingle owner status
carfax_clean_titleClean title status
cityListing city location
cylindersEngine cylinder count
dealer_idMarketCheck dealer ID
dealer_typeType of dealer (e.g., franchise, independent)
dealership_group_nameDealership group name
doorsNumber of doors
drivetrainVehicle drivetrain type
engineComplete engine specification
engine_blockEngine block configuration
engine_sizeEngine displacement
exterior_colorExterior color designation
fuel_typePrimary fuel type
high_value_featuresPremium feature list
interior_colorInterior color designation
makeVehicle manufacturer
mc_dealer_idMarketCheck dealer ID (under new system of dealership management)
mc_location_idMarketCheck location ID
mc_rooftop_idMarketCheck rooftop ID
mc_website_idMarketCheck website ID
modelVehicle model name
msa_codeMetropolitan Statistical Area code
options_packagesAvailable option packages
powertrain_typePowertrain classification
seating_capacityPassenger seating capacity
seller_nameSeller name (lowercase)
sourceWebsite domains where listed
stateListing state location
transmissionTransmission configuration
trimVehicle trim level
vehicle_typeGeneral vehicle category
versionVehicle version identifier
yearVehicle model year
zipListing zip code

Facet Pagination

By default, facets return the top 20 terms for each field. You can control pagination using positional parameters offset, limit:

  • offset - Starting position for terms (default: 0)
  • limit - Maximum number of terms to return (default: 20, max: 1000)

Example: facets=make|20|20 returns makes 21-40

Facets Sorting

Facet terms can be sorted by count or alphabetically using the facet_sort parameter:

  • count (default) - Sort by frequency (highest first)
  • index - Sort alphabetically

Example: facets=make|0|20&facet_sort=index returns makes sorted alphabetically

Sort order is applied to all facets in the request, not individually.

Range Facets

Range facets provide statistical distribution analysis for numeric fields, creating buckets for data visualization and market insights.

Parameters and Syntax

  • range_facets — Comma-separated list of field names to facet on, with optional range and interval:
    range_facets=field_name|start|end|interval
    • start (optional): Lower bound of the range (default varies by field)
    • end (optional): Upper bound of the range (default varies by field)
    • interval (optional): Size of each bucket (default: (end - start)/20)
    • Example: range_facets=price|500|20000|1000 returns price ranges with 1000 intervals between 500 and 20000.
  • If start is specified but end is not, the API adds the default end value for that field to the start value.
  • Value of interval has to be greater than (end - start)/200, otherwise the API will return an error.
Properly encode facet parameters in your HTTP requests to avoid issues with the pipe (|) character, which is used to separate parameters. For example, use %7C for | in URLs.

Example

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
year: '2020',
make: 'ford',
model: 'f-150',
rows: '0',
range_facets: 'price|500|100000|10000,miles|5000|50000|5000'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Response

  • Range facets are returned in the range_facets field of the response, structured as key-value pairs
  • Keys are field names and values are objects containing:
    • counts: Array of buckets with lower_bound, upper_bound, and count properties
    • interval: Size of each bucket
    • start: Lower bound of the range
    • end: Upper bound of the range
    • before: Count of listings below the start value
    • between: Count of listings within the range
    • after: Count of listings above the end value
  • If requested field is not allowed for range facets, it will be included in the response but with an error message indicating the field is not supported for range facets.
    {
      "range_facets": {
        "xyz": {
          "result": "Error",
          "message": "Field xyz is not allowed in range facets"
        }
      }
    }
    

Available Range Facets

FieldDescriptionDefault Range
city_mpgCity fuel efficiency0-100
domDays on market0-100
dom_180Days on market (180-day window)0-100
dom_activeActive days on market0-100
dos_activeDays on source active0-100
finance_down_paymentFinance down payment amount0-3000
finance_empFinance estimated monthly payment0-1000
finance_loan_aprFinance annual percentage rate0-20
finance_loan_termFinance loan duration0-100
highway_mpgHighway fuel efficiency0-100
lease_down_paymentLease down payment amount0-3000
lease_empLease estimated monthly payment0-500
lease_termLease duration (months)0-80
milesVehicle mileage range0-10000
msrpManufacturer suggested retail price500-10500
priceListing price range500-10500
All ranges are inclusive of lower_bound and exclusive of upper_bound. The end default value is added to your start value.

Stats

The Search API calculates comprehensive statistics for numeric fields, providing market analysis and competitive intelligence insights.

Parameters

  • stats — Comma-separated list of fields to calculate statistics on
    • Example: stats=price,miles,msrp
  • stats can be combined with other parameters like facets, sort_by, and rows for detailed analysis

Example

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
year: '2024',
make: 'ford',
model: 'f-150',
rows: '0',
stats: 'price,miles'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Response

  • Statistics are returned in the stats field of the response, structured as key-value pairs
  • Keys are field names and values are objects containing:
    • min: Minimum value
    • max: Maximum value
    • count: Total number of listings with non-null values
    • missing: Number of listings with missing values
    • sum: Total sum of values
    • mean: Average value
    • stddev: Standard deviation
    • sum_of_squares: Sum of squares for variance calculation
    • median: Median value
    • percentiles: Percentile distribution (5th, 25th, 50th, 75th, 90th, 95th, 99th)
  • If requested field is not allowed for stats, it will be included in the response but with an error message indicating the field is not supported for stats
    {
      "stats": {
        "xyz": {
          "result": "Error",
          "message": "Field xyz is not allowed in stats"
        }
      }
    }
    

Available Stats Fields

Below are the available fields for statistics calculations:

Financial Metrics

FieldDescription
priceListing price statistics
msrpMSRP statistics

Performance and Efficiency

FieldDescription
milesVehicle mileage statistics
highway_mpgHighway fuel efficiency statistics
city_mpgCity fuel efficiency statistics

Market Timing

FieldDescription
domDays on market statistics
dom_180DOM 180-day statistics
dom_activeActive days on market statistics
dos_activeDays on site active statistics

Finance and Lease Terms

FieldDescription
lease_termLease duration statistics
lease_empLease monthly payment statistics
lease_down_paymentLease down payment statistics
finance_loan_termFinance loan duration statistics
finance_loan_aprFinance APR statistics
finance_empFinance monthly payment statistics
finance_down_paymentFinance down payment statistics

Search for cars available near specific locations using geographic coordinates, zip codes, or radius parameters for location-based inventory discovery.

Parameters

  • latitude and longitude - Exact coordinates
  • zip - ZIP code reference point
  • radius - Search radius in miles

You can combine location parameters with any other search filters for precise geographic targeting.

The upper limit of the radius parameter depends on your subscription package.

Example

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
year: '2024',
make: 'ford',
model: 'f-150',
rows: '2',
zip: '90007',
radius: '50'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
Radius values greater than 100 miles may slow API response times.

Response

  • Each listing includes a dist field with distance from the specified coordinates or ZIP code
  • Distance is calculated in miles and returned as a numeric value
  • Results are sorted by distance by default, with nearest listings appearing first

Response

The Inventory Search API returns JSON data with comprehensive vehicle listing information, including inventory details, dealer information, vehicle specifications, and optional facets and statistics.

Schema

interface InventorySearchResponse {
  num_found: number; // Total number of listings matching search criteria
  listings: Listing[]; // Array of vehicle listings
  facets?: Facets; // Field facets (when facets parameter is used)
  stats?: Stats; // Statistical data (when stats parameter is used)
  range_facets?: RangeFacets; // Range-based facets (when range_facets parameter is used)
}

interface Listing {
  id: string; // Unique listing identifier
  vin: string; // Vehicle Identification Number
  heading?: string; // Formatted listing title
  price?: number; // Current listing price
  miles?: number; // Vehicle mileage
  msrp?: number; // Manufacturer's Suggested Retail Price (as per dealer website)
  data_source: string; // Original data source identifier. Mostly `mc` for MarketCheck
  vdp_url?: string; // Vehicle detail page URL
  carfax_1_owner?: boolean; // Single owner history flag (If mentioned on dealer website)
  carfax_clean_title?: boolean; // Clean title status (If mentioned on dealer website)
  exterior_color?: string; // Exterior color description
  interior_color?: string; // Interior color description
  base_int_color?: string; // Standardized interior color
  base_ext_color?: string; // Standardized exterior color
  dom: number; // Days on market (lifetime)
  dom_180: number; // Days on market in last 180 days
  dom_active: number; // Days on market while active
  dos_active: number; // Days on site while active
  seller_type: string; // Type of seller (dealer, fsbo, auction)
  inventory_type: string; // Inventory classification (new, used)
  is_certified?: number; // Certified pre-owned flag (1 if certified, only appears when car is certified)
  stock_no?: string; // Dealer stock number
  last_seen_at: number; // Last seen timestamp (Unix Seconds), when the listing was last updated
  last_seen_at_date: string; // Last seen date (ISO format)
  scraped_at: number; // First seen timestamp (Unix Seconds), when the listing was first scraped
  scraped_at_date: string; // First seen date (ISO format)
  first_seen_at: number; // First seen timestamp (Unix Seconds), when the listing was first seen. Copy of `scraped_at` field
  first_seen_at_date: string; // First seen date (ISO format)
  first_seen_at_source: number; // First seen at source website timestamp (Unix Seconds)
  first_seen_at_source_date: string; // First seen at source website date (ISO format)
  first_seen_at_mc: number; // First seen at MarketCheck timestamp (Unix Seconds)
  first_seen_at_mc_date: string; // First seen at MarketCheck date (ISO format)
  ref_price?: number; // Previously listed price at same source for reference
  price_change_percent?: number; // Price change percentage from reference price
  ref_price_dt?: number; // Reference price date timestamp (Unix Seconds)
  ref_miles?: number; // Previously listed mileage at same source for reference
  ref_miles_dt?: number; // Reference mileage date timestamp (Unix Seconds)
  source: string; // Data source website domain
  model_code?: string; // Manufacturer model code
  in_transit?: boolean; // Vehicle in transit status
  availability_status?: string; // Current availability status
  financing_options?: ListingFinance; // Finance information (when available)
  leasing_options?: ListingLease; // Lease information (when available)
  media?: Media; // Photos and media content links
  dealer?: Dealer; // Dealer information
  mc_dealership?: McDealership; // Enhanced dealer information from MarketCheck's new dealership system
  build?: Build; // Vehicle specifications
}

interface ListingFinance {
  loan_term?: number; // Loan term in months
  loan_apr?: number; // Annual percentage rate
  down_payment?: number; // Required down payment amount
  down_payment_percentage?: number; // Down payment as percentage
  estimated_monthly_payment?: number; // Monthly payment estimate
}

interface ListingLease {
  lease_term?: number; // Lease term in months
  down_payment?: number; // Required down payment amount
  estimated_monthly_payment?: number; // Monthly lease payment estimate
}

interface Media {
  photo_links?: string[]; // Array of photo URLs from dealer website
  photo_links_cached?: string[]; // Array of cached photo URLs from MarketCheck
}

interface Dealer {
  id: number; // Unique dealer identifier
  website: string; // Dealer website URL
  name: string; // Dealer business name
  dealer_type?: string; // Dealer classification (franchise, independent)
  street?: string; // Street address
  city?: string; // City name
  state?: string; // State or province
  country?: string; // Country code
  latitude?: string; // Geographic latitude
  longitude?: string; // Geographic longitude
  zip?: string; // Postal/ZIP code
  phone?: string; // Contact phone number
  seller_email?: string; // Contact email address
  dealership_group_name?: string; // Parent dealership group
  msa_code?: string; // Metropolitan Statistical Area code
}

interface McDealership {
  mc_website_id?: number; // MarketCheck website identifier
  mc_dealer_id?: number; // MarketCheck dealer identifier
  mc_location_id?: number; // MarketCheck location identifier
  mc_rooftop_id?: number; // MarketCheck rooftop identifier
  mc_dealership_group_id?: number; // MarketCheck dealership group identifier
  mc_dealership_group_name?: string; // MarketCheck dealership group name
  mc_sub_dealership_group_id?: number; // MarketCheck sub-dealership group identifier
  mc_sub_dealership_group_name?: string; // MarketCheck sub-dealership group name
  mc_category?: string; // MarketCheck seller category (Dealer, FSBO, Auction, etc.)
  website?: string; // Dealer website URL
  name?: string; // Dealer business name
  dealer_type?: string; // Dealer classification (franchise, independent)
  street?: string; // Street address
  city?: string; // City name
  state?: string; // State or province
  country?: string; // Country code
  latitude?: string; // Geographic latitude
  longitude?: string; // Geographic longitude
  zip?: string; // Postal/ZIP code
  msa_code?: string; // Metropolitan Statistical Area code
  phone?: string; // Contact phone number
}

interface Build {
  year: number; // Model year
  make: string; // Vehicle manufacturer
  model?: string; // Vehicle model
  trim?: string; // Trim level
  version?: string; // Specific version/variant
  body_type?: string; // Body style (sedan, SUV, truck, etc.)
  vehicle_type?: string; // Vehicle category
  transmission?: string; // Transmission type
  drivetrain?: string; // Drivetrain configuration
  fuel_type?: string; // Fuel type (gasoline, electric, hybrid, etc.)
  engine?: string; // Engine description
  engine_size?: number; // Engine displacement
  engine_block?: string; // Engine block configuration
  doors?: number; // Number of doors
  cylinders?: number; // Number of cylinders
  made_in?: string; // Manufacturing country
  overall_height?: string; // Vehicle height
  overall_length?: string; // Vehicle length
  overall_width?: string; // Vehicle width
  std_seating?: string; // Standard seating capacity
  highway_mpg?: number; // Highway fuel economy
  city_mpg?: number; // City fuel economy
  powertrain_type?: string; // Powertrain classification
}

interface Facets {
  [key: string]: {
    item: string; // Facet term/value
    count: number; // Number of listings for this term
  }[];
}

interface Stats {
  [key: string]: {
    min: number; // Minimum value
    max: number; // Maximum value
    count: number; // Number of values
    missing: number; // Count of missing values
    sum: number; // Sum of all values
    mean: number; // Arithmetic mean
    stddev: number; // Standard deviation
    sum_of_squares: number; // Sum of squared values
    median: number; // Median value
    percentiles: {
      [key: string]: number; // Percentile values
    };
  };
}

interface RangeFacets {
  [key: string]: {
    counts: {
      lower_bound: number; // Range lower bound
      upper_bound: number; // Range upper bound
      count: number; // Number of listings in range
    }[];
    interval: number; // Interval size
    start: number; // Starting value
    end: number; // Ending value
    before?: number; // Count below start
    between: number; // Count within range
    after?: number; // Count above end
  };
}

Success Response

  • 200 OK - Returns JSON object with search results
  • Always includes num_found field indicating total matching listings
  • listings array contains vehicle data (empty if no matches)
  • Optional facets, stats, and range_facets based on request parameters
  • Missing or null fields are excluded from individual listing objects

Error Response

Status CodeDescriptionCommon Causes
400Bad RequestInvalid parameter values or malformed request
401UnauthorizedMissing/invalid API key
403ForbiddenAccess denied to resource
422Unprocessable EntityPagination limits exceeded, invalid parameters
429Too Many RequestsRate limit exceeded
500Internal Server ErrorTemporary server issues
502Bad GatewayIssues with upstream services
503Service UnavailableAPI maintenance or downtime

Error Response Format

Most error responses follow this structure, except for 502 and 503 errors

{
  "code": <HTTP status code>,
  "message": "<Error message describing the issue>"
}

Best Practices

  • Always check HTTP status codes
  • Implement retry logic for 5xx errors
  • Respect rate limits (429 responses)
  • Validate parameters before sending requests

Use Cases & Examples

Filtering by Specifications

  • Filter listings based on specific vehicle attributes like make, model, year, and more. This allows users to find vehicles that match their exact preferences.
  • Refer to the Parameters section for available filters.
  • All parameters support multiple values, by using comma-separated values. For example, to filter by multiple makes, you can use make=Toyota,Honda,Ford.
  • API searches are case-insensitive, yet we recommend using facets to get exact values for filtering. And pass them in the same case as they appear in the facets response to ensure consistency.

Example:

Here we're filtering for electric, 4 wheel drive SUVs from 2023 to 2025 from Ford, Audi, Hyundai, Chevrolet, and Toyota.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
rows: '2',
fuel_type: 'Electric',
drivetrain: '4WD',
body_type: 'SUV',
year: '2023,2024,2025',
make: 'Ford,Audi,Hyundai,Chevrolet,Toyota'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Inventory Types

  • Use car_type to filter by new or used vehicles:
    • car_type=new for new vehicles
    • car_type=used for used vehicles
    • car_type=certified for certified pre-owned vehicles. These are subset of used vehicles.
  • If car_type is not specified, the API returns all types by default.
  • The API response contains the inventory_type field which shows new or used values. When car_type=certified is used, the inventory_type will be used since certified cars are used vehicles, but they will have an additional is_certified field with value 1 to distinguish them from regular used cars.

Example:

Here we're filtering for used vehicles.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', car_type: 'used', rows: 2},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Certified Pre-Owned Vehicles:

  • Certified vehicles are a subset of used vehicles, so when you filter by car_type=used, you will also get certified vehicles included in the results.
  • To filter for certified vehicles specifically, you can use car_type=certified.
    • This will return only certified pre-owned vehicles, excluding other used vehicles.
    • These vehicles will have inventory_type=used and an additional is_certified=1 field.
  • If you want to exclude certified vehicles from your search, you can use exclude_certified=true parameter.

Example:

Here we're filtering for certified pre-owned vehicles.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', car_type: 'certified', rows: 2},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Here we're filtering for used vehicles, excluding certified pre-owned vehicles.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', car_type: 'used', exclude_certified: 'true', rows: 2},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Country and Region

  • Use country parameter to specify the market:
    • country=us for US listings (default)
    • country=ca for Canadian listings
    • country=all for both US and Canadian listings
  • Country parameter is required for all requests, and defaults to us if not specified. This is most common gotcha when using the API for Canadian data, as you need to explicitly pass country=ca in each request.
  • Use state and city parameters to filter by specific regions within the US or Canada.
  • Use msa_code to filter by Metropolitan Statistical Area (MSA) codes for more precise regional targeting (US only).

Example:

Here we're filtering for vehicles in Michigan, USA.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', country: 'us', state: 'MI', rows: 2},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Here we're filtering for vehicles in Ontario, Canada.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', country: 'ca', state: 'ON', rows: 2},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Find a Car by VIN

  • Use vin parameter to search for a specific vehicle by its VIN (Vehicle Identification Number).
  • This returns single listing (if exists) of that VIN, which is searchable (aka Attributed, Understanding Attribution).
  • If you want all listings of that VIN, including duplicates, then add nodedup=true parameter to your request. This will return all listings of that VIN, including those that are not attributed (i.e. not searchable).

Example:

Here we're searching for a vehicle by its VIN.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', vin: '1FTFW1E81PKE39204'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Here we're searching for all listings of that VIN, including duplicates.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', vin: '1FTFW1E81PKE39204', nodedup: 'true'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
This example VIN may or may not be active in future, as it is used for demonstration purposes only. If you want to test this example, please use a VIN that is currently active in the MarketCheck database.

Similar Cars

This is the most common use case for the Search API, allowing you to find similar vehicles based on various attributes.

  • To find similar cars to a specific vehicle, use vins and match parameters:
    • vins - Comma-separated list of VINs to find similar vehicles for
    • match - Comma-separated list of attributes to match on (allowed values: year, make, model, trim, version, build_code, options_packages)
  • The API returns listings that match the specified VINs and specified attributes.
  • match parameter is optional, and if not specified, the API will match similar cars based on squish vin of the provided VINs.
    • Squish VIN is a simplified version of the VIN in which last 6 characters (which are serial number) and 9th character (a security check digit) are removed
    • Squish VIN thus signifies the general characteristics of the vehicle without being tied to a specific instance.
    • From these 10 character squish VINs, the 10th character (11th in the original 17 digit VIN) is replaced with ?, to remove plant code information, which is not relevant for matching similar cars.
    • For example, squish VIN for 1FTEW1EG9HKC35917 is 1FTEW1EGHK. From this squish VIN, the 10th character is replaced with ?, resulting in 1FTEW1EGH?. This is the squish VIN that is used for matching similar cars.
    • This is not generally what users want, so we recommend using match parameter to specify the attributes you want to match on.
  • If the match parameter includes version, build_code, or options_packages:
    • Matching is performed exclusively on valid 17-character VINs.
    • version: A field derived from the Neovin decode. It represents a unique combination of the vehicle's year, make, model, trim, transmission, drivetrain, wheelbase, and body type.
    • build_code: A field derived from the Neovin decode that combines the vehicle's body style with its specific set of installed options packages.
    • options_packages: A list of the options packages installed on the vehicle. When used for matching, the API returns vehicles that have at least all the packages present in the input VIN. The returned vehicles may also contain additional options.
    • If any of the provided VINs are invalid or cannot be decoded, the API will return similar cars only for the valid VINs, excluding the invalid ones.
    • If none of the provided VINs are valid or decodable, the API will respond with a 422 Unprocessable Entity error.
Please note that parameter to use is vins, notvin. This is a common gotcha when using the API, as it is easy to miss the plural form.

Example:

Here we're finding similar cars to a specific VIN, matching on year, make, model, and trim.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
vins: '1FTFW1E81PKE39204',
match: 'year,make,model,trim',
rows: 2
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Market Value Analysis

  • Use stats parameter to calculate statistics for specific fields, such as price, miles, and days on market to analyze market trends and vehicle competitiveness.
  • Combining this with similar cars search allows you to find average price and mileage for similar vehicles, providing insights into market value and trends.

Example:

Here we're finding average price and mileage for similar cars to a specific VIN, matching on year, make, model, and trim.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
vins: '1FTFW1E81PKE39204',
match: 'year,make,model,trim',
stats: 'price,miles',
rows: 0
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Time on Market Analysis

  • There are several parameters that can be used to analyze time on market:
    • dom - Days on market, throughout the entire lifetime of the car
    • dom_180 - Days on market in the last 180 days
    • dom_active - Active days on market across all sources
    • dos_active - Days on source active
  • Use stats parameter to calculate statistics for these fields, such as average days on market, minimum and maximum days on market, and percentiles.
  • In addition, you can use first_seen_range and last_seen_range parameters to filter listings based on when they were first and last seen, respectively.

Example:

Here we're finding average days on market for similar cars to a specific VIN, matching on year, make, model, and trim, and filtering by first seen date in the last 30 days.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
vins: '1FTFW1E81PKE39204',
match: 'year,make,model,trim',
stats: 'dom,dom_active,dos_active',
first_seen_days: '30-0',
rows: 0
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Dealer Inventory Analytics and Insights

The Search API provides specialized functionality for dealer-level analysis, allowing you to gain comprehensive insights into specific dealer inventories, performance metrics, and market positioning. This is designed for competitive analysis, dealer performance monitoring, market research, and business intelligence applications.

Key Characteristics:

  • Analytics-Focused: Returns comprehensive statistics, facets, and range distributions without individual listing data for optimal performance
  • Complete Inventory View: Includes all listings for the specified dealer, including duplicates that are normally filtered out in standard searches
  • Performance Optimized: Automatically configured for fast analytics queries rather than listing browsing, enabling rapid insights across large dealer inventories
  • Comprehensive Coverage: Access to all dealer-related parameters for granular analysis at dealership, location, rooftop, and website levels

Behavioral Changes with Dealer Parameters:

When any dealer-related parameter is used (dealer_id, source, mc_website_id, etc.), the API automatically:

  • Sets rows=0 and start=0 (no individual listings returned) to focus computational resources on analytics
  • Disables deduplication (nodedup=true behavior) to show complete dealer inventory including all non-attributed (non-searchable) listings
  • Focuses computational resources on statistics and facet calculations for faster response times

Need Individual Listings? If you require access to individual dealer listings with enhanced pagination limits, use the Dealership Syndication API which provides specialized endpoints for retrieving complete dealer inventories with higher pagination thresholds and detailed listing data.

Available Dealer Parameters:

  • dealer_id
  • source
  • dealership_group_name
  • mc_website_id
  • mc_dealer_id
  • mc_location_id
  • mc_rooftop_id
  • mc_dealership_group_id
  • mc_dealership_group_name
  • mc_sub_dealership_group_id
  • mc_sub_dealership_group_name

Examples:

Dealer Inventory Statistics

Here we're analyzing price and mileage statistics for a specific dealer's inventory:

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', source: 'stgautogroup.com', stats: 'price,miles'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Dealer Make and Model Distribution

Here we're analyzing the make and model distribution for a specific dealer to understand their inventory composition:

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', source: 'autonationusa.com', facets: 'make,model'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Dealer Price Range Analysis

Here we're analyzing price distribution for a specific dealer using range facets:

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
source: 'carmax.com',
range_facets: 'price|10000|100000'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Dealer Performance Metrics

Here we're analyzing market timing metrics for a specific dealer:

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', mc_website_id: '1035095', stats: 'dom_active'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Search by Features

  • Use high_value_features and options_packages parameters to filter listings based on specific features and options.
  • high_value_features allows you to filter by premium features like navigation, sun/moonroof, leather seats, etc.
  • options_packages allows you to filter by specific option packages that are available for the vehicle. These are codes that are sourced from NeoVIN
  • Use exclude_high_value_features and exclude_options_packages to exclude listings with specific features or option packages.

Example:

Here we're filtering for vehicles with navigation and sun/moonroof, and excluding those with leather seats.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
high_value_features: 'Navigation,connected camera,Sun/moonroof',
rows: 2
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Plot

  • plot is a special parameter that allows you to pull more number of listings but with limited fields, for the purpose of plotting data on a map or chart
  • It can also be used for analytical purposes
  • When plot is set to true, the API returns upto 1000 listings with limited fields in one go

Example:

Here we're pulling a plot of vehicles in California, USA, with limited fields.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', state: 'CA', plot: 'true', rows: 1000},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Filter by Ranges

  • For numeric fields, there are corresponding range parameters that allow you to filter listings based on specific ranges.
  • For example, price_range, miles_range, msrp_range, dom_range, dom_180_range, dom_active_range, dos_active_range, highway_mpg_range, city_mpg_range and more
  • These parameters allow you to filter listings based on specific ranges for each field, such as price, mileage, days on market, and fuel efficiency.

Example:

Here we're filtering for vehicles with price between $10,000 and $20,000, mileage between 0 and 50,000 miles, and days on market between 0 and 30 days.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
price_range: '10000-20000',
miles_range: '0-50000',
dom_active: '0-30',
rows: 2
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Unique Values / Drill-Downs

  • Use facets and range_facets parameters to get unique values and distributions for specific fields.
  • These values can be used for drill-downs in your application, allowing users to explore inventory based on specific attributes.
  • facets provides unique counts for categorical fields, while range_facets provides distribution analysis for numeric fields.
  • We recommend using facets to get unique values for filtering, as it provides a more accurate and consistent set of values compared to using the raw data from other input sources

Example:

Here we're getting unique trim and fuel types for 2023 Ford F-150 vehicles, with a minimum count of 10 listings for each trim and fuel type.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
rows: 0,
year: '2023',
make: 'Ford',
model: 'F-150',
facets: 'trim|0|1000|10,fuel_type|0|1000|10'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
  • Use photo_links or photo_links_cached parameters to get only the listings that have valid photo links or cached photo links.
  • This is useful for filtering out listings that do not have photos, which can be important for applications that require images for display or analysis.
  • photo_links returns the original photo links, while photo_links_cached returns the cached photo links that are stored in the MarketCheck database.

Example:

Here we're filtering for vehicles with valid photo links, and returning only the listings that have photos.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', min_photo_links: '5', photo_links: 'true', rows: 2},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Non-VIN Listings

  • MarketCheck Search API allows you to include non-VIN listings in your search results as well for completeness sake
  • Read here to understand what non-VIN listings are: Understanding VIN v/s Non-VIN Listings
  • To include non-VIN listings in your search results, use include_non_vin_listings=true parameter in your request
  • This will return listings that do not have a VIN, but are otherwise valid listings
  • Since VIN is missing, the specifications data is not normalized and may pollute the results

Example:

Here we're including non-VIN listings in our search results, which will return listings that do not have a VIN.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', rows: 2, include_non_vin_listings: 'true'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Daily New Arrivals

  • You can find new vehicles that have entered the market in the last 24 hours using first_seen_at_source_range (absolute) or first_seen_at_source_days (relative) parameters
  • These would be the vehicles that have been added to the source website for the first time in the last 24 hours

Example:

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', first_seen_at_source_days: '1-*', rows: '2'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}
The first_seen_at_range or first_seen_days parameter will not work for this use case, as they facilitate filtering based on when the listing (not the vehicle) was first seen in the MarketCheck database at that source, which may not be the same as when it was first seen on the source website.

Vehicles with Recent Price Changes

  • You can find vehicles that have had their prices changed in the last 24 hours using price_change parameter or price_change_range parameter, used in conjunction with first_seen_at_range or first_seen_days parameters
  • This allows you to identify vehicles that have recently been discounted or had their prices adjusted, which can be useful for finding deals or understanding market trends
  • Pairing with first seen parameters allows you to avoid listings whose ref_price is substantially older due to the listing being stale, or past historic listing of the same vehicle that has been re-listed at a later date

Example:

Here we're finding vehicles that have had their prices increased in last 24 hours, sorted by price change percentage in descending order.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
rows: '2',
first_seen_days: '1-*',
price_change: 'positive',
sort_by: 'price_change_percent',
sort_order: 'desc'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

As is evident from the example above, it can return listings that have had their prices corrected due to crawling errors. That is the reason why we recommend using price_change_range parameter to filter out listings that have had their prices changed within a specific range, such as 50% or lower, to avoid such listings.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
rows: '2',
first_seen_days: '1-*',
price_change: 'positive',
price_change_range: '0-50',
sort_by: 'price_change_percent',
sort_order: 'desc'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Find In-Transit Vehicles

  • You can find vehicles that are currently in transit using the in_transit parameter
  • These are vehicles that have been marked as in transit by the dealer, indicating they are on their way to the dealership or another location
  • Typically, these are available in new inventory type

Example:

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', in_transit: 'true', car_type: 'new', rows: '2'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Finding Electric Cars

  • You can find electric vehicles using the fuel_type parameter
  • But for values that should be passed in the fuel_type parameter, we recommend using facets to get the exact values for filtering
  • As besides pure electric vehicles, there are also hybrid and plug-in hybrid vehicles that may be classified as electric vehicles

Example:

Here we're first gathering the unique fuel types using facets

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', facets: 'fuel_type|0|100', rows: '0'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Next, we can filter for electric vehicles using the fuel_type parameter with many values, including electric, Electric / Unleaded, Electric / Premium Unleaded, Electric / E85 and Electric / Hydrogen, which are the values that are returned in the facets response.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
fuel_type: 'electric,Electric / Unleaded,Electric / Premium Unleaded,Electric / E85,Electric / Hydrogen',
rows: '2'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Find Plug-In Hybrid Vehicles

  • You can find plug-in hybrid vehicles using the powertrain_type parameter
  • Similar to other specification parameters, we recommend using facets to get the exact values for filtering before using them in your search

Example:

Here we're first gathering the unique powertrain types using facets

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', facets: 'powertrain_type', rows: '0'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Next, we can filter for plug-in hybrid vehicles using the powertrain_type parameter with value PHEV (Plug-In Hybrid Electric Vehicle), which is the value that is returned in the facets response.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {api_key: 'YOUR_API_KEY', powertrain_type: 'PHEV', rows: '2'},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Average Discount on MSRP

  • You can find the average discount on MSRP for vehicles using the stats parameter
  • This allows you to understand how much vehicles are being discounted from their MSRP, which can be useful for finding deals and understanding market trends
  • You can also filter by specific makes, models, or other attributes to get more granular insights into discounts

Example:

Here we're finding the average discount on MSRP for new vehicles from Ford

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
rows: '0',
make: 'Ford',
car_type: 'new',
stats: 'msrp,price'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Here we're finding the average discount on MSRP for new vehicles from Toyota

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
rows: '0',
make: 'Toyota',
car_type: 'new',
stats: 'msrp,price'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Typical Mileage for Year, Make, Model

  • You can find the typical mileage for a specific year, make, and model using the stats parameter
  • This allows you to understand how much vehicles of a specific year, make, and model are typically driven, which can be useful for understanding market trends and typical vehicle usage

Example:

Here we're finding the typical mileage for 2020 Ford F-150 models.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
year: '2020',
make: 'Ford',
model: 'F-150',
car_type: 'used',
stats: 'miles',
rows: '0'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Price Difference Between Certified and Non-Certified Vehicles

  • You can find the price difference between certified and non-certified vehicles using the stats parameter
  • First, you can filter for certified vehicles using car_type=certified, and then calculate the average price for certified vehicles
    • Note: Certified vehicles will have inventory_type=used and is_certified=1 in the response
  • Next, you can filter for non-certified vehicles using car_type=used&exclude_certified=true, and then calculate the average price for non-certified vehicles
  • Finally, you can compare the average prices to understand the price difference between certified and non-certified vehicles

Example:

Here first we're finding the average price for certified vehicles with age less than 5 years

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
car_type: 'certified',
year_range: '2020-2025',
stats: 'price',
rows: '0'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Next, we're finding the average price for non-certified vehicles with age less than 5 years

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
car_type: 'used',
exclude_certified: 'true',
year_range: '2020-2025',
stats: 'price',
rows: '0'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Finally, we can compare the average prices to understand the price difference between certified and non-certified vehicles

Find Comparable Vehicles

  • You can find comparable vehicles to a specific vehicle using the vins and match parameters
  • This allows you to find vehicles that are similar to a specific vehicle based on attributes like year, make, model, and trim
  • You can also use the stats parameter to calculate statistics for the comparable vehicles, such as average price, mileage, and days on market
  • This can be useful for understanding how a specific vehicle compares to similar vehicles in the market

Example:

Here we're finding comparable vehicles to a specific VIN, matching on year, make, model, and trim, and calculating average price and mileage for the comparable vehicles.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
vins: '1HGBH41JXMN109186',
match: 'year,make,model,trim',
stats: 'price,miles',
rows: '2'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

ICE v/s Electric Vehicles

  • You can compare Internal Combustion Engine (ICE) vehicles with Electric Vehicles (EVs) using the powertrain_type parameter
  • Along with that, you can use stats parameter to calculate statistics for both types of vehicles, such as average price, mileage, and days on market etc
  • This allows you to understand how ICE vehicles compare to EVs in terms of market trends, pricing, and usage

Example:

Here we're comparing ICE vehicles with Electric Vehicles, calculating average price and mileage for both types of vehicles.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
powertrain_type: 'Combustion',
stats: 'price,miles',
rows: '0'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Here we're getting statistics for Electric Vehicles, including average price, mileage.

request.js
import axios from 'axios';

const options = {
method: 'GET',
url: 'https://api.marketcheck.com/v2/search/car/active',
params: {
api_key: 'YOUR_API_KEY',
powertrain_type: 'BEV',
stats: 'price,miles',
rows: '0'
},
headers: {Accept: 'application/json'}
};

try {
const { data } = await axios.request(options);
console.log(data);
} catch (error) {
console.error(error);
}

Performance Considerations

Optimal Request Patterns

  1. Use specific filters instead of broad searches to reduce response times
  2. Limit the number of facets and stats fields, as these can increase processing time
  3. Avoid deep pagination - consider data feeds for large datasets
  4. Use lower radius values for spatial searches to improve performance. If too large area is desired then consider using city or state parameters instead of radius, as they are more efficient.

Response Time Expectations

Search TypeExpected Response Time
Basic search (city, make)< 200ms
Complex filters (5+ params)< 500ms
Spatial search (< 100mi radius)< 300ms
Stats calculations< 800ms
Large facet requests< 1s

See Also