Spycart APISpycart.me ↗
Query Spycart.me's price comparison index via one endpoint. Get offers with price, merchant, shipping, landed total, and locked-offer counts across retailers.
What is the Spycart API?
The Spycart.me API exposes one endpoint — search_products — that returns up to 9 response fields per search, including a ranked list of publicly visible offers from Spycart's cross-retailer price comparison index. Each call yields offer-level data such as numeric price, currency code, merchant name, shipping cost, and landed total, alongside metadata on how many additional offers the site withholds from non-subscribers.
curl -X GET 'https://api.parse.bot/scraper/b9acf1dd-2358-4824-ab19-7e572fbaa99c/search_products?query=headphones' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace spycart-me-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Spycart price search — find cross-retailer offers for a product."""
from parse_apis.spycart_me_api import Spycart, InputFormatInvalid
client = Spycart()
# Search for publicly visible offers on a product query.
try:
result = client.searches.find(query="running shoes")
except InputFormatInvalid:
print("Bad query format")
raise
# Inspect the visible offers returned by the site.
if result.offers:
for offer in result.offers:
print(offer.title, "-", offer.price, offer.currency, "from", offer.merchant)
print(" link:", offer.product_url)
else:
print("No visible offers for this query")
# Show how many additional offers are locked behind a subscription.
print(f"Visible: {result.visible_offer_count}, Hidden: {result.hidden_offer_count}")
if result.hidden_offers_locked:
print("Locked merchants:", ", ".join(result.hidden_merchants))
# Per-source feed status for transparency.
for src in result.sources:
print(f" {src.source}: {src.offers} offers ({src.status})")
print("exercised: searches.find")
Runs a Spycart price search for a free-text product query and returns the offers the site shows to a visitor without an account. Each offer carries the product title, merchant, numeric price with its currency code, shipping and landed total when the site reports them, the product picture URL and the retailer product URL. Spycart does not publish a product description; the title is the only descriptive text. The site shows only the single cheapest offer publicly and locks the rest behind a subscription: hidden_offer_count and hidden_merchants report that locked remainder, which is not retrievable through this API. Live searches aggregate many retailers so a call typically takes 5-20 seconds; a query with no offers anywhere returns an empty offers array. One round trip per call, no pagination.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Free-text product search term, e.g. a product type or brand and model. |
{
"type": "object",
"fields": {
"query": "the search term echoed by the site",
"offers": "array of publicly visible offers: id, title, merchant, price (number), shipping (number or null), landed_total (number or null), currency (ISO code), image_url, product_url (retailer page), source (site's feed name), offer_group (site section: verified, community, nearby, retail or google)",
"sources": "per-feed status the site reports for this search: source name, offers found, status (ok, empty, error, skipped)",
"hidden_merchants": "merchant names the site teases for the locked offers",
"hidden_offer_count": "number of additional offers the site locks behind its subscription",
"visible_offer_count": "number of offers the site showed publicly",
"hidden_offers_locked": "true when the site withheld offers for non-subscribers"
},
"sample": {
"data": {
"query": "headphones",
"offers": [
{
"id": "globalsource-7-Shenzhen bluetooth headp",
"price": 4.5,
"title": "Shenzhen bluetooth headphones China wireless headphones BSCI factory bluetooth headphones ISO9001 bluetooth",
"source": "globalsource",
"currency": "USD",
"merchant": "CWEE Electronics Co., Ltd.",
"shipping": null,
"image_url": "https://p.globalsources.com/IMAGES/PDT/S1236459060/wireless-headphones.jpg?ver=6141723533",
"offer_group": "google",
"product_url": "https://www.globalsources.com/Bluetooth-headphone/wireless-headphones-1236459060p.htm",
"landed_total": 4.5
}
],
"sources": [
{
"offers": 2,
"source": "openprices",
"status": "ok"
},
{
"offers": 0,
"source": "community",
"status": "empty"
}
],
"hidden_merchants": [
"JBL",
"Bright",
"amazon_us"
],
"hidden_offer_count": 99,
"visible_offer_count": 1,
"hidden_offers_locked": true
},
"status": "success"
}
}About the Spycart API
What the API returns
The search_products endpoint accepts a single required parameter, query, which is a free-text product search term — for example a product category, brand, or model number. The response echoes the query back and returns an offers array containing the publicly visible listings Spycart surfaces. Each offer record includes id, title, merchant, numeric price, currency, shipping (null when not reported), landed_total (null when not reported), and a direct url to the offer on the source retailer.
Source feed transparency
The sources field provides per-feed status for every price source Spycart queried: source name, the count of offers found from that source, and a status value (ok, empty, error, or skipped). This lets you see which retailers contributed to the result set and which were unreachable or returned no data for the query term.
Locked-offer metadata
Spycart withholds a portion of its offer index from visitors without a subscription. The API surfaces this boundary explicitly: hidden_offer_count gives the number of locked offers, hidden_merchants lists the merchant names teased for those locked results, visible_offer_count confirms how many were returned openly, and hidden_offers_locked is a boolean flag that is true whenever offers were withheld. This metadata is useful for estimating market coverage and for surfacing to end users when the open data set is incomplete.
The Spycart API is a managed, monitored endpoint for Spycart.me — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when Spycart.me changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official Spycart.me API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a browser extension that shows the lowest landed_total for any product a user is viewing
- Track price movements across merchants by polling search_products for a specific model number over time
- Identify which retailers carry a product by scanning the merchant field across offer results
- Flag when hidden_offers_locked is true to prompt users to consult additional sources
- Aggregate shipping and landed_total data to surface true cost comparisons beyond list price
- Monitor per-source status codes in the sources field to detect when a retailer feed goes down
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.