Ecommerce data API · Scraping API · Southeast Asia

Southeast Asia ecommerce data, open by API.

A maintained marketplace dataset across Shopee, Tokopedia, TikTok Shop, Lazada and Blibli — monthly back to 2020, at brand, merchant, category and SKU grain — plus on-demand scraping for the questions last month’s number can’t answer. Operators and analysts welcome: no pipeline to build, no seat to negotiate, priced per row before you commit.

Free trial credits. Catalogue and cost estimates work immediately.

Buying at volume, or feeding a warehouse? Start here instead.

5 marketplaces 6 markets earliest 2020-11 latest 2026-06 refreshed monthly
A real question, priced recipe 1.1

“Rank every brand in Indonesian sunscreen by GMV for the last six months, show me how share moved, and flag anyone who gained more than a third.”

What it takes →

Estimate any scope free before you commit.

That is one question, answered once. Feeding a product or a warehouse is priced on committed volume — talk to us.

What you can build

Every tool below is one person, one afternoon.

Not a roadmap — working recipes, each mapped to the endpoint it calls and how it runs. Collection, cleaning, brand-labelling and deduplication are already done. You write the analysis.

The toolWhich APIRuns
Category share trackerEvery brand ranked by GMV, month over month, with share movement and a realised-price index against the category average.Data APIRuns unattended
Competitor price monitorRuns unattended, any hour. Current price and pre-discount price on every Shopee listing you care about, every night.Scraping APIRuns unattended
Price-band mapRealised price per unit for every brand, bucketed into deciles. Finds the band holding real demand with few competitors.Data APIRuns unattended
Channel-control auditSearch your own brand and its misspellings, aggregate by shop, compare against your authorised distributor list.Scraping APIApproval gated · 08:00–18:00 GMT+8
New-launch watchSorted by newest, run weekly, diffed against last week. A listing that takes volume immediately has budget behind it.Scraping APIApproval gated · 08:00–18:00 GMT+8
Variant demand profilerWhich size, shade or pack actually sells. Demand concentrated in two of nine variants is a range that needs pruning.Scraping APIApproval gated · 08:00–18:00 GMT+8
Review minerGrouped by star rating. The low band is your defect list; the high band is your positioning — run it on a competitor's product.Scraping APIRuns unattended
Keyword rank trackerRuns unattended, weekly. Where your listings rank on Tokopedia for each keyword, and who climbed past you.Scraping APIRuns unattended

Two questions, two APIs

Most category questions are one question asked over two time horizons.

Trend and share come from the maintained monthly panel. A price on a page right now comes from an on-demand fetch. Both run on one API key and one prepaid wallet, so you are not choosing a vendor twice.

What happened The panel

Data API

The maintained monthly record. Already scraped, cleaned, brand-labelled and deduplicated.

  • Monthly GMV, units, market share, price and ratings
  • Brand, merchant, category and SKU grain
  • Shopee, Tokopedia, TikTok Shop, Lazada and Blibli
  • Query it, or export a whole category in bulk

“Who is winning this category, and how has that moved?”

Data API docs →
What is happening now

Scraping API

On-demand collection from live marketplace pages, fetched when you ask for it.

  • Product pages, search results and merchant catalogues
  • Current price, discount, stock and reviews
  • Shopee, Tokopedia, Lazada, Blibli, TikTok Shop and Amazon
  • Jobs run async; charged only on success

“What is this exact product doing today?”

Scraping API docs →

Coverage

Every market we can sell you, with the gaps left visible.

Coverage is not uniform, and depth varies by market and category. Publishing that is the point: any buyer finds the gaps in diligence anyway, and a claim you have to test converts worse than a table you can read.

Market History from Latest month Categories Marketplaces
Indonesia ID 2020-112026-06121 Shopee, Tokopedia, Lazada, Blibli, TikTok Shop
Thailand TH 2022-112026-0615 Shopee, Lazada, TikTok Shop
Singapore SG 2022-112026-0615 Shopee, Lazada, TikTok Shop
Philippines PH 2022-112026-0614 Shopee, Lazada, TikTok Shop
Vietnam VN 2022-112026-0612 Shopee, Lazada
Malaysia MY 2022-112026-0612 Shopee, Lazada

Read from GET /v1/exports/catalog on 8 September 2026. Indonesia is the deep market by a wide margin — 121 categories against twelve to fifteen elsewhere, and history back to 2020 rather than 2022. The catalogue returns the exact month range for every category, so you can price and scope a pull against what is actually there before you commit to it.

Putting it into production

Feeding a product or a warehouse is a different conversation.

Credits answer a question. If the data is going to sit underneath something your team or your clients depend on, it gets bought differently: committed volume, delivered on a schedule, with rights that let you do what you actually need with it.

Straight into your warehouse

Whole categories delivered monthly into BigQuery, Snowflake or Databricks, so it lands beside your own sell-out data instead of in another login. Stable schema, refreshed on a known cadence.

Priced on committed volume

Not credit packs. An annual commitment across the categories and markets you actually need, with overage beyond it — a cost you can plan against rather than a meter you watch.

Redistribution, scoped

If you resell it as your own insight, or embed it in a product your customers use, that is a normal arrangement here. It is written into the agreement rather than left ambiguous.

History nobody can backfill

Indonesian monthly history runs to November 2020. Anyone starting collection today cannot reconstruct five years of it at any price. That is the part you genuinely cannot buy elsewhere.

This is how research firms who resell it as their own insight, tooling vendors who need collection in markets they do not cover, and global data providers already buy it.

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 it free
cURLdry run · nothing charged
curl -X POST "https://api.magpieiq.com/data/v1/exports" \
  -H "Authorization: Bearer mgk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"country":"ID",
       "category_3":["Facial Serum"],
       "date_from":"2026-01","date_to":"2026-05",
       "estimate":true}'
2Then pull it charged on rows returned
cURLreturns a job id to poll
# same call without estimate:true — poll the job,
# then download signed links per category and month.
curl -X POST "https://api.magpieiq.com/data/v1/exports" \
  -H "Authorization: Bearer mgk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"country":"ID",
       "category_3":["Facial Serum"],
       "date_from":"2026-01","date_to":"2026-05",
       "format":"parquet"}'

Bulk exports arrive as signed download links, one file per category and month. Take gzipped CSV if the data is going into a spreadsheet, or Parquet if it is going into a warehouse — same rows, smaller and faster to load, and BigQuery, Snowflake, Databricks and DuckDB all read it directly. Every endpoint and parameter is in the API reference, and production pipelines are in the recipes.

No engineer required

Not technical? Point your AI assistant at it 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. Give Claude, ChatGPT or Cursor your key and the two links below, and it will read the documentation, 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
Read https://data.magpieiq.com/llms.txt and the docs at
https://data.magpieiq.com/docs — they cover both Magpie APIs:
a monthly panel for history, and on-demand scraping for live pages.
My Magpie API key is: <paste your key>

Rules: always call the catalogue first to see what exists, always
run a dry-run estimate (estimates are free) and show me the row
count and dollar price, and ask me before spending any credits.

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.
1 · Get a key

Free trial credits on signup. Catalogue browsing and estimates work immediately.

2 · Give it the two links

llms.txt is a plain-text brief written for language models. The docs carry every parameter for both APIs.

3 · Keep 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.

Agent recipes

Prompts you can paste straight into an assistant.

Each one states the question it answers, the endpoint it uses, what it costs and where it will bite you. Three are open below; there are eleven in all, and they carry the house rules with them — always cost an export before running it, always ask the catalogue what exists, and never build an unattended schedule on an endpoint that needs approval.

2.1 Price match: is anyone undercutting us

Whether your published price is genuinely the lowest.

Runs unattended
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 Shopee URL, which ends in -i.{shop_id}.{item_id}. POST to /v1/shopee/get_pc/submit with {"region": "my", "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 from the result, dividing 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. The payload also carries a field called is_lowest_price_at_shopee; report it alongside each row, since it answers the question directly.

Only use get_pc. It is the one endpoint that runs without manual approval.

At scale. Runs unattended. Beyond a handful, use POST /v1/shopee/get_pc_bulk/submit with a CSV, and get_pc_bulk/schedules with a cron to run it nightly.

1.1 Category market share and trend

Who leads a category, how concentrated it is, how that has moved.

Runs unattended
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 of the form {"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, expressed 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, because that is a collection artefact rather than a real market move, and say so rather than reporting it as a trend.

Cost shape. The gap between a full category export and a top-N slice can be large. Estimate any scope free before you commit.

2.4 Enumerate a competitor’s whole shop

A rival’s full catalogue, pricing, and what actually sells.

Approval gated · 08:00–18:00 GMT+8
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. When parsing, note that the numeric sold field is 0 on this endpoint, so read monthly_sold_count_text, which is exact. The payload repeats items across the shop’s own category tabs, so deduplicate by itemid first or you will roughly double the total.

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

Important: do not compare this shop’s total against a market total built from keyword search. The shop is completely enumerated and the market is not, so any share computed that way is a ceiling rather than an estimate. If I ask for a share, say that.

Install once, and your agent has all eleven

The skill carries every recipe, the house rules and the response-parsing details, so an agent stops guessing endpoint paths and field names.

cURLno key required to read it
curl https://data.magpieiq.com/skill/SKILL.md
Know the cost before you run it

Estimate any scope free before you commit — which is exactly why every export accepts "estimate": true and every recipe tells the agent to run it and wait for a human before spending anything.

Code versions of these workflows — monthly exports to S3, Airflow DAGs, warehouse loads — are in the recipe library, and every endpoint is in the documentation.

Worked examples, each with real row counts: How to Build a Competitor Price Tracker for Shopee (2026) · Nine Market Tracking Tools an Ecommerce Manager Can Build in a Week · What Southeast Asia Marketplace Data Actually Costs · Find the Price Gap Before You Launch · Is This Category Worth Entering? Three Numbers That Answer It · all insights.

Questions

What buyers ask before they commit.

How far back does the history go?

Indonesia reaches back to 2020-11; the other five markets start 2022-11. Depth is not uniform below that: it varies by category, and the catalogue returns the exact first and last month for each one. Raw collection predates the analysis-ready panel in several places, so if you need deeper history than the catalogue shows, ask — it is a scoping conversation, not a no.

How often does it refresh?

Monthly. The latest month available across every market is 2026-06. The catalogue returns the exact range for each category, so you can check a specific scope before pricing it. If you need the state of a specific product today rather than a past month, that is the Scraping API.

Can I redistribute the data or resell insights built on it?

Redistribution and derived-product rights are set in your agreement rather than assumed by default. Agencies reselling client-facing analysis and platforms embedding the data are both normal, and both need the right terms in place. Tell us what you intend to build and we will scope it.

How does this compare to Bright Data or Oxylabs?

They are general-purpose collection at global scale: you point them at a site and they fetch it. We maintain a cleaned, brand-labelled panel of specific Southeast Asian marketplaces, refreshed monthly, and sell on-demand collection alongside it. If you need arbitrary sites scraped worldwide, use them. If you need a consistent SKU-level record of Shopee, Tokopedia, Lazada, Blibli and TikTok Shop that someone else already cleaned, that is this.

Why not build it myself?

You can. The collection is the easy half. The expensive half is brand labelling, deduplication across listing changes, keeping a taxonomy stable while marketplaces move theirs, and noticing when a category quietly stops returning data — which is why the coverage table above lists retired categories rather than hiding them.

What happens if a query fails or returns nothing?

It costs nothing. Credits are charged only against rows actually returned, and dry-run estimates never charge at all, so you always know the price before you commit.

Start with the catalogue. It costs one credit to see everything we have.

Sign up and you get trial credits straight away — enough to browse the catalogue, price a real export and pull a first slice. Paid exports are reviewed so we can scope the right market, categories and history with you, normally within one business day.

cURLthe catalogue call
curl "https://api.magpieiq.com/data/v1/exports/catalog?country=ID" \
  -H "Authorization: Bearer mgk_live_..."