GravitronData

Marketplace product data API

Marketplace prices, without
the scraping problem.

One HTTP call returns live price, seller, stock and specifications from a marketplace listing — as typed JSON, not HTML you have to parse. No proxies to buy, no bot walls to fight, no parser to keep repairing.

No card required. Live call in under a minute.

Live playground

Run a genuine lookup against a live listing and see the real response. Free with any account — no card, and it does not touch your credits.

Sign in to run a live lookup

Every press makes a real request to a live marketplace, so the playground is limited to signed-in accounts — 5 free lookups each, on top of your 250 trial credits.

{
  "marketplace": "…",
  "item_id": "974282675",
  "title": "…",
  "price": { "current": 14.97, "was": 17.99, "currency": "USD" },
  "availability": { "in_stock": true, "transactable_offers": 1 },
  "seller": { "name": "…", "is_first_party": true }
}
~4sMedian uncached lookup
31Marketplaces catalogued
13Regions
1Credit per answer

How a lookup works

Three steps, four seconds, one credit.

1

You send an ID

An item ID or a product URL, with your API key as a bearer token. No SDK, no session, no crawl configuration.

2

We fetch and parse

The live listing is retrieved through our own infrastructure, past the marketplace's bot protection, and the embedded product record is read directly rather than guessed at from rendered HTML.

3

You get typed JSON

The same field names and types every time, whichever marketplace it came from. Missing values come back as null, never absent.

What comes back

Every lookup returns the same envelope. Pick a group to see the fields it contains.

  • price.current — the price a buyer sees now
  • price.was — struck-through price when discounted
  • price.unit — price per unit of measure
  • price.unit_label — e.g. $8.44/oz
  • price.currency — ISO currency code
  • price.is_reduced — whether it is on markdown
  • availability.in_stock — buyable right now
  • availability.status — raw marketplace status
  • availability.transactable_offers — offers that can actually be bought
  • availability.additional_offers — competing offers on the listing
  • fulfillment.type — shipped, store, marketplace
  • fulfillment.shipping_price — where published
  • seller.name — who holds the buy box
  • seller.is_first_party — the marketplace itself, or a third party
  • seller.id — stable seller identifier
  • seller.rating — seller rating out of 5
  • seller.review_count — seller feedback volume
  • seller.type — raw seller classification
  • title, brand, model
  • upc — barcode where published
  • specifications — full attribute table
  • category_path — breadcrumb hierarchy
  • images — primary and gallery URLs
  • reviews.rating, reviews.count

Drop it into your stack

It is a GET request with a header. There is nothing to install.

curl https://api.gravitrondata.com/v1/walmart/price \
  -H "Authorization: Bearer gd_live_..." \
  -G --data-urlencode "item_id=974282675"
import requests

r = requests.get(
    "https://api.gravitrondata.com/v1/walmart/price",
    params={"item_id": "974282675"},
    headers={"Authorization": "Bearer gd_live_..."},
    timeout=90,
)
data = r.json()
print(data["price"]["current"], data["seller"]["name"])
const r = await fetch(
  "https://api.gravitrondata.com/v1/walmart/price?item_id=974282675",
  { headers: { Authorization: "Bearer gd_live_..." } },
);
const data = await r.json();
console.log(data.price.current, data.seller.name);
$ch = curl_init(
  'https://api.gravitrondata.com/v1/walmart/price?item_id=974282675'
);
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ['Authorization: Bearer gd_live_...'],
]);
$data = json_decode(curl_exec($ch), true);
echo $data['price']['current'];

Full documentation →

Who uses this

Anyone whose margin depends on what a competitor is charging right now.

Repricers

Track competitor prices and buy-box ownership on the SKUs you sell. Knowing who holds the buy box matters as much as the number — a low price from a seller with no stock is not competition.

Arbitrage & sourcing

Check price, stock and seller before committing to inventory. Distinguish a genuine deal from a dead listing still displaying an old price, using transactable_offers.

Catalogue teams

Fill in UPCs, brands, specifications and images for products you already carry, from listings that already describe them properly.

Analysts & agencies

Build price histories and category benchmarks for clients without running scraping infrastructure or explaining a blocked crawler.

Build it yourself, or don't

An honest comparison. Building it is entirely possible — it is just rarely the cheapest thing you could be doing.

Rolling your ownThis API
Proxy bandwidth $0.18–$0.74 per 1,000 pages, before code Included
Bot protection TLS fingerprinting, rotating defences, ongoing work Handled, continuously
Parser maintenance Breaks whenever the marketplace restructures a page Ours to fix, not yours
Output HTML you normalise yourself Typed JSON, stable shape
Time to first result Days to weeks About a minute
Failed requests You pay for the bandwidth anyway Not billed

Marketplace coverage

Browse all 31 →

31 marketplaces across 13 regions. Coverage expands continuously — see the catalogue for what you can call today and request the ones you need next.

Common questions

How fresh is the data?

Each uncached lookup fetches the live listing when you ask. Responses are cached five minutes, so treat any answer as up to five minutes old.

What if a lookup fails?

Roughly 1 in 20 uncached calls is blocked upstream and returns a 502. You are not charged, and a single retry almost always succeeds.

Do credits expire?

No. Buy once, use them whenever. Unused credits are refundable within 14 days.

Is there a contract?

No. Prepaid credits, no subscription, no minimum. Stop whenever.

More questions →

Start with 250 free credits

No card required. Generate a key and make a live call in under a minute.

Create an account