Skip to main content
GET
Find the best price for a product across retailers

Query Parameters

q
string

Search query (product name, keyword, or brand + model). Required unless product_uid or entity_uid is supplied.

Minimum string length: 1
product_uid
string

Stable product identifier returned by a prior Syntalic shopper response. When supplied, the endpoint should pin to this listing instead of re-resolving free text.

Minimum string length: 1
entity_uid
string

Stable cross-retailer entity identifier returned by a prior Syntalic shopper response. When supplied, the endpoint should resolve within the same physical-product entity.

Minimum string length: 1
country
enum<string>
default:us

Country (us or ca)

Available options:
us,
ca
retailer
enum<string>

Filter to a specific retailer platform (long-tail specialty stores are also present; any platform key is accepted)

Available options:
amazon,
walmart,
target,
bestbuy,
homedepot,
costco,
ikea,
samsclub,
cvs,
dillards
limit
integer
default:10

Max results to return (default 10, min 1, max 50)

Required range: 1 <= x <= 50
strict
boolean
default:false

When true, restrict the comparison to entity-verified listings of the matched product (match_type 'entity' only). Default false also includes title-match rows — useful for broad queries, but may mix product variants.

Response

Best price result

query
string
dropped_terms
string[] | null

Non-null when no product matched the query as written and retrieval had to drop these trailing terms to resolve one. Treat the result as an answer to the SHORTENED query: NOBULL Laces black returning these terms as ['black'] means the black variant was not found, only NOBULL Laces.

country
string
currency
string
product_uid
string
entity_uid
string | null
scope
enum<string>

'entity' = prices span the resolved product's cross-platform entity; 'listing' = the product belongs to no multi-member entity, so only its own listing is priced.

Available options:
entity,
listing
member_count
integer
match_suspect
boolean

True when the pipeline has already flagged this entity as welding together materially different products (intra_entity_incoherent). The comparison set — and therefore the headline price — may span variants that are not substitutes; prefer strict=true or a product_uid when this is set.

retailers_compared
integer

Distinct retailers spanned by best_price + other_prices. 1 means no cross-retailer comparison was possible for this product — it is the cheapest listing found, not the cheapest anywhere. Most direct-to-consumer products are sold by a single merchant and can never exceed 1; named-retailer products are roughly 48x likelier to support a real comparison. related_matches are excluded from this count because they are title matches on other entities, not prices for this product.

resolved_product
object
gpc
object | null
best_price
object
other_prices
object[]

Title-matched rows OUTSIDE the resolved entity. Not price comparisons for the same product — a cheaper row here may be a different product, and a genuinely identical SKU can also land here when entity resolution split it across retailers.

meta
object