Ecommerce intelligence for people and AI

Turn marketplace data into decisions—and give your AI better context.

Structured, cleaned and labelled ecommerce data across Shopee, Lazada, TikTok Shop, Tokopedia and Amazon — ready for reporting, warehouses, applications, and grounding the AI workflows your teams already run. Need a current pull instead? Fetch it fresh, on demand.

New accounts start with free credits to explore the data and test an integration.

Not an engineer? Hand it to your AI agent

6 marketplaces6 marketsmonthly from 2025-01latest 2026-07

Marketplace context, made usable

Illustrative flow — data is the evidence your AI is missing.

Marketplace signals

ProductsListings & categories
PricesPrice & promotion signals
ReviewsRatings & customer signals
SellersMerchants & brands
Magpie context layerClean · label · connect

grounded marketplace context

Better AI context

Clean fields

A consistent shape for every record.

product_titlepricecurrency

Labelled entities

Know what belongs to whom.

brandmerchantcategory

Fresh evidence

Keep the source and observation in view.

source_urlobserved_at
SKUs tracked
10M+
SKUs tracked
Sellers
900K+
Sellers
Brands
98K+
Brands
Data API marketplaces
5
Data API marketplaces
Scraping API marketplaces
6
Scraping API marketplaces

Trailing 12 months, panel-wide. The context layer starts with the market record beneath it.

What you can build

Every tool below is one person, one afternoon.

Not a roadmap — working recipes, each mapped to the API it calls and whether it can run on a schedule. Collection, cleaning, brand-labelling and deduplication are already done. You, or your agent, write the analysis.

Category share tracker

Every brand ranked by GMV, month over month, with share movement and a price index against the category average.

Data APIRuns unattended
Competitor price monitor

Current price on every Shopee listing you care about, every night, flagged wherever someone undercuts you.

Scraping APIRuns unattended
Price-band map

Realised price per unit for every brand, bucketed into deciles, to find the band holding demand with few competitors.

Data APIRuns unattended
Channel-control audit

Search your brand and its misspellings, aggregate by shop, and compare against your authorised distributor list.

Scraping APIApproval-gated
New-launch watch

Newest listings in your category, weekly, diffed against last week. A listing that takes volume immediately has budget behind it.

Scraping APIApproval-gated
Variant demand profiler

Which size, shade or pack actually sells — demand concentrated in two of nine variants is a range that needs pruning.

Scraping APIApproval-gated
Review miner

Reviews grouped by star rating: the low band is a defect list, the high band is positioning. Run it on a competitor's product.

Scraping APIRuns unattended
Keyword rank tracker

Where your listings rank on Tokopedia for each keyword, week by week, and who climbed past you.

Scraping APIRuns unattended

Approval-gated jobs are reviewed by hand and process Mon–Fri 08:00–17:00 Asia/Jakarta (WIB), so never build an unattended schedule on them. Everything marked “runs unattended” can run on a cron.

Coverage

One schema, five marketplaces — Shopee leads, it isn't the whole story.

Depth, freshness and available fields vary by marketplace. Select one to see how it's covered.

Shopee

Data API + Scraping API

Shopee sales data, already scraped and cleaned.

Indonesia, Thailand, Vietnam +3 more

Shopee API →Shopee sales data →

Shopee coverage can extend beyond Southeast Asia in select cases — for example Brazil or Taiwan — where depth, freshness and available fields differ from the core markets above. Need a marketplace or market that isn't listed? Talk to us.

Two ways to reach the data

Structured for analysis. Fresh when you need it now.

The Data API and Scraping API share one credit wallet and one login — pick per query, not per contract.

Data API

Maintained, cleaned marketplace data — ready for analysis, reporting, applications and AI workflows.

GMVMarket sharePrice & discountRatingsSKU rankBrandCategory
Explore Data API

Scraping API

Fresh, on-demand collection when the question needs the market as it is right now.

Marketplace pagesSearch resultsProduct detailsReviewsMerchant catalogues
Explore Scraping API
See it in action

Ask in plain words. See the price first. Get the answer.

Forty seconds on what Magpie does. The full walkthrough covers the three ways in: an AI chat in your browser, an AI that works on your computer, or your own code.

Magpie in 40 seconds. Plays muted; use the controls for sound.

Watch the 4-minute walkthrough on YouTube
No engineer required

Hand it to your AI agent and describe what you want.

Plenty of people buying this data run a category, not a data team. You do not need to learn either API — you need an answer. Paste the prompt into Claude, ChatGPT or Cursor — if you don't have a key yet, it walks you through getting one — and it will work out whether the question is a panel question or a live one, price it, and come back with the numbers.

Paste this into your assistant
You're helping me use the Magpie ecommerce data APIs (https://data.magpieiq.com). Start by reading https://data.magpieiq.com/skill/SKILL.md and follow its house rules.

I may be new to Magpie. If you are not connected yet, don't ask me for an API key and never print one: walk me through the one-line setup in that file instead (the Magpie connector in Claude or ChatGPT, `npx @magpieiq/cli init` for coding agents, or `magpie login` in a terminal). Discovery, estimates and a few sample answers work before I sign in.

If you can't make HTTP requests from where you're running, say so and suggest the connector or a coding agent such as Claude Code or Cursor, instead of guessing results.

Always estimate first (estimates are free) and ask me before any call that costs credits.

Also call the catalogue first to see what exists, and when you estimate, show me the row count and the dollar price.

What I want: the top 20 skincare brands by GMV on Shopee Indonesia for the last 6 months, with each brand's market share and average price. Then scrape the top 3 SKUs and tell me what they cost on their pages today.
1Get a key

New accounts start with free credits. The catalogue and cost estimates work straight away.

2Give it the skill

One plain-text file with both APIs, the house rules, the response-parsing details and all eleven recipes, so an agent stops guessing endpoint paths and field names.

3Keep it on a leash

Dry-run estimates are free and exact, so tell your assistant to price every pull and ask before spending. The wallet is prepaid — it cannot overspend a balance you have not topped up.

Install the skill · no key needed
curl -o SKILL.md https://data.magpieiq.com/skill/SKILL.md
Browsing agents can read /skill/SKILL.md or the shorter brief at /llms.txt directly. Every endpoint and parameter is in the docs.
Agent recipes

Prompts you can paste straight into an assistant.

Each one states the question it answers, the API it uses and where it will bite you. Copying a recipe includes a short preamble that points your agent at the skill and tells it to estimate before spending, so a single pasted recipe stands on its own. Code versions — S3 exports, Airflow, warehouse loads — are in the pipeline recipes.

1.1Category market share and trendWho leads a category, how concentrated it is, and how that has moved.
Data APIRuns unattendedNo approval step and no working-hours window, so it can run on a schedule.
Prompt
Call GET /v1/exports/catalog and confirm my category and market are available and for which months. Then POST /v1/exports with "estimate": true and a body like {"country": "ID", "category_3": ["Shampoo"], "platforms": ["Shopee"], "date_from": "2026-01", "date_to": "2026-06", "top": 100, "format": "csv", "estimate": true}. Show me rows, credits and dollars, and wait for my approval before submitting without estimate. Then poll GET /v1/exports/{export_id} until the files are ready and download them.

From the data give me: the ten largest brands by GMV and their share in the most recent month; how each share has moved since the first month; realised price per unit for each against the category average, as an index with the average at 100; and any brand whose share moved more than a third either way. Flag any month whose row count is sharply out of line with its neighbours — that is a collection artefact, not a market move, so say so rather than reporting it as a trend.

The gap between a full category export and a top-N slice can be large. The estimate is free and exact.

1.2Price architecture for a new entryWhat price bands exist in a category, and which are crowded.
Data APIRuns unattendedNo approval step and no working-hours window, so it can run on a schedule.
Prompt
Using the catalogue and a free estimate first, export the most recent full month of my category at "top": 500. Compute realised price per unit per brand as GMV divided by units. Bucket brands into price deciles against the category average and report, per decile, how many brands sit there and what share of category GMV they hold together.

Look for a band holding meaningful demand but few competing brands. If there is no such gap, say so explicitly rather than manufacturing one.
1.3Is this category worth enteringSize, concentration, and whether the top of the category is defended.
Data APIRuns unattendedNo approval step and no working-hours window, so it can run on a schedule.
Prompt
Using the catalogue and a free estimate first, export the most recent month of my category at "top": 100. Report the combined share of the top ten brands, the number of brands needed to reach half of category GMV, and the realised price index of the top three against the category average.

Then classify the category: concentrated and premium (leaders hold high share at high price), concentrated and cheap (leaders hold share by undercutting), or fragmented (no brand holds meaningful share). Give the reasoning, not just the label — each implies a different entry cost.
2.1Price match: is anyone undercutting usWhether your published price is genuinely the lowest.
Scraping APIRuns unattendedNo approval step and no working-hours window, so it can run on a schedule.
Prompt
I will give you a list of products, each with our offer price and the Shopee URL of the matching listing. For each row, extract shop_id and item_id from the URL, which ends in -i.{shop_id}.{item_id}. POST to /v1/shopee/get_pc/submit with {"region": "id", "item_id": "...", "shop_id": "..."} to get a task_id, then poll GET /v1/shopee/get_pc/retrieve/{task_id} until it returns a result. Read the current price and divide it by 100000.

Give me a table of every product where the Shopee price is at or below ours, showing our price, the Shopee price and the gap. Also report is_lowest_price_at_shopee for each row — read it from each entry in item.models, because the item-level field comes back null.

Only use get_pc: it runs without manual approval.

At scale, get_pc_bulk takes a CSV, and get_pc_bulk/schedules runs it nightly on a cron.

2.2Who is selling in this category right nowThe shops that dominate a category today, official store versus reseller.
Scraping APIApproval-gatedEach job is approved by hand and processed Mon–Fri 08:00–17:00 Asia/Jakarta (WIB). Never build an unattended schedule on it.
Prompt
Submit POST /v1/shopee/search-items/submit with Shopee search URLs sorted by sales (?page=0&sortBy=sales), several keywords covering my category, up to 50 URLs. Poll the job, download each frame and parse it using the Shopee parsing rules in the skill. Deduplicate by itemid before summing anything.

Compute GMV per listing as units × price, aggregate by shop, and report the twenty largest shops with their share of the total observed, listing count, average realised price and location. Separate official brand stores from resellers where the shop name makes that clear. Tell me how many submitted URLs returned data and how many failed.

search-items is approval-gated. If the job returns awaiting_approval, hand me the job_id and stop polling.

2.3Unauthorised sellers and channel controlWho is selling your brand without permission, and at what price.
Scraping APIApproval-gatedEach job is approved by hand and processed Mon–Fri 08:00–17:00 Asia/Jakarta (WIB). Never build an unattended schedule on it.
Prompt
Run a Shopee search-items job using my brand name and its common misspellings as keywords, sorted by sales. Parse per the skill's Shopee rules, deduplicate by itemid and aggregate by shop.

I will give you my list of authorised distributors and our price floor. Produce two tables: every shop selling the brand that is not on the list, with observed GMV, listing count and location, sorted by size; and any authorised shop whose realised price sits more than twenty per cent below the floor.

Do not accuse anyone of counterfeiting. Report only what the listing data shows — who is selling, at what price, from where.
2.4Enumerate a competitor's whole shopA rival's full catalogue, its pricing, and what actually sells.
Scraping APIApproval-gatedEach job is approved by hand and processed Mon–Fri 08:00–17:00 Asia/Jakarta (WIB). Never build an unattended schedule on it.
Prompt
Submit POST /v1/shopee/merchant-items/submit with {"urls": ["https://shopee.co.id/shop/<shop_id>"], "max_pages": 5}, up to 50 shop URLs per request, then poll GET /v1/shopee/merchant-items/retrieve/{job_id} until complete. On this endpoint the numeric sold field is 0, so read monthly_sold_count_text, which is exact. The payload repeats items across the shop's category tabs, so deduplicate by itemid first or the total roughly doubles.

Give me the listing count, total observed monthly GMV, the twenty listings carrying most of it, and the price distribution.

Do not compare this shop's total against a market total built from keyword search. The shop is fully enumerated and the market is not, so any share computed that way is a ceiling, not an estimate. If I ask for a share, say that.
2.5New product and assortment watchWhat competitors have just launched.
Scraping APIApproval-gatedEach job is approved by hand and processed Mon–Fri 08:00–17:00 Asia/Jakarta (WIB). Never build an unattended schedule on it.
Prompt
Run a Shopee search-items job for my category keywords sorted by newest (?page=0&sortBy=ctime). Save the itemid list. Run it again weekly and compare against the previous week's list.

Each week, report the listings that are new since the last run, grouped by shop, with price and any units already recorded. Highlight any new listing that took meaningful volume immediately — that usually means a launch with paid support behind it.
2.6SKU-level variant demandWhich size, shade or pack actually sells.
Scraping APIApproval-gatedEach job is approved by hand and processed Mon–Fri 08:00–17:00 Asia/Jakarta (WIB). Never build an unattended schedule on it.
Prompt
Submit POST /v1/shopee/variant_sold_v1/submit with {"items": [{"item_id": "...", "shop_id": "...", "country": "id"}]} for the products I give you — one country per request. Poll until complete.

Report sold count per variant, ranked, with each variant's share of the product total. Tell me whether demand concentrates in one or two variants or spreads evenly, because that decides whether the range needs pruning.

Billed per item, and only when the job is approved — a rejection or timeout costs nothing.

2.7Review harvesting for product feedbackWhat buyers complain about, in their own words.
Scraping APIRuns unattendedNo approval step and no working-hours window, so it can run on a schedule.
Prompt
For the Lazada product I give you, take the numeric item ID from the product URL (…-i5133872551.html gives 5133872551) — the review endpoints reject product page URLs. Submit POST /v1/lazada/product-reviews with {"requests": [{"url": "https://my.lazada.co.id/pdp/review/getReviewList?itemId=<item_id>"}]} and poll GET /v1/lazada/retrieve/{task_id}. Each call returns five reviews; add &pageNo=2, &pageNo=3 for more. Agree a page budget with me before reading more than a few pages, because every page is billed.

Group the reviews by star rating. Summarise the recurring complaints in the one and two star reviews and the recurring praise in the five star ones, quote a few representative lines verbatim, and say how many reviews you read out of reviewTotal.
2.8Keyword rank trackingWhere your listings rank when shoppers search a keyword, and how that moves.
Scraping APIRuns unattendedNo approval step and no working-hours window, so it can run on a schedule.
Prompt
Submit POST /v1/tokopedia/search/bulk/submit with {"items": [{"list_type": "search", "keyword": "<keyword>", "product_limit": 60}]} for each of my keywords (up to 50 per request). Poll GET /v1/tokopedia/search/bulk/retrieve/{job_id}, and download each item's download_url promptly and save it — the links expire.

A listing's rank is its position in the products array, counting from 1. Skip any product whose ads.id is filled — that slot is sponsored, not organic. Match my listings by id or shop.id and record rank per keyword per run, then show me who climbed past us since the last run.

Results come back in the scraper's fixed order, which is close to but not exactly the default shopper view.

For whoever wires it up

Estimate, then export. Two calls.

Bearer auth, one key across both APIs. The estimate returns the exact row count and price and charges nothing, so nobody commits budget to a number they have not seen.

1Price itfree · nothing charged
curl -X POST "https://api.magpieiq.com/data/v1/exports" \
  -H "Authorization: Bearer $MAGPIE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"country":"ID",
       "category_3":["Facial Serum"],
       "date_from":"2026-01","date_to":"2026-05",
       "estimate":true}'
2Then pull it15 credits per row returned
# same body without "estimate": true — returns an export_id.
# Poll GET /v1/exports/{export_id}, then download the signed
# links: one file per category and month.
curl -X POST "https://api.magpieiq.com/data/v1/exports" \
  -H "Authorization: Bearer $MAGPIE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"country":"ID",
       "category_3":["Facial Serum"],
       "date_from":"2026-01","date_to":"2026-05",
       "format":"parquet"}'

Take gzipped CSV for a spreadsheet or Parquet for a warehouse — same rows; BigQuery, Snowflake, Databricks and DuckDB read Parquet directly. Every parameter is in the Data API docs, and the live per-endpoint prices are on the rate card

Pricing

Prepaid credits — one wallet across the Data API and Scraping API.

Buy a credit pack and pay per data row, billed only on success. Bigger deposits drop the price per credit; team plans add seats, history and SKU-level access.