[ API & MCP ]

Query the index from your own code or your AI assistant

A REST API and an MCP server over shops, ads, products, advertisers and captured emails, plus your own tracked stores, alerts and collections. One request is one lookup regardless of rows, no per-row credits, signed webhooks for alerts, and every response states what is measured and what is modelled.

The API keys panel in Settings with a key name field, Create key button and a list of keys showing prefix, created, last used and revoke

[ Core capabilities ]

What API & MCP does

Shops, ads, products, advertisers and emails with the same presets, sorts and filters as the app; your tracked stores, alerts and collections; usage, freshness, the spec and an llms.txt guide for agents.

Endpoints and what they return

GET /shops, /shops/{domain}
Directory with presets and floors; one shop with twelve-month trends, top ads and top products
GET /shops/{domain}/ads, /similar, /profile
A page of the shop’s ads; up to 8 lookalikes with the formula score; stored storefront profile and tech stack
GET /ads, /ads/{id}
The Meta and TikTok library with presets, status and floors; one ad
GET /products, /products/{id}
The catalog with sort, source, trends, price and order floors; one product with siblings and store ads
GET /advertisers, /advertisers/{pageId}
The library grouped by Meta page; one page with its stores, launch series and top ads
GET /emails, /emails/{id}
Captured newsletter and flow emails; one email with text preview and, on request, the sanitised HTML
GET, POST /tracked; DELETE /tracked/{domain}
Your tracked stores with measured stats; track and untrack by domain. Free
GET /alerts, /collections, /collections/{id}
Your alert events newest first; your boards with their saved items. Free
GET /me/usage, /system/freshness, /llms.txt
Your meter; when each pipeline last ran; the agent guide. Freshness and llms.txt need no key

[ How you use it ]

API & MCP, in four steps

  1. 01

    Create a key

    Settings, General, API keys. Name it, copy it once; only a hash is kept. Up to ten active keys, revocation is immediate.

  2. 02

    Call the API

    Send the key as a Bearer token to /api/v1/shops, /ads, /products, /advertisers or /emails with the same presets and sorts the app uses. Page size up to 100, one lookup per page.

  3. 03

    Or connect an assistant

    Point Claude, ChatGPT or n8n at the MCP endpoint with the same header, or hand it /api/v1/llms.txt. The seventeen tools appear under majorka; the server tells the model to relay the measured-vs-modelled caveat.

  4. 04

    Watch the meter and the alerts

    Each data response reports used, limit and reset time; the in-app usage card shows the same number. Track stores through the API and receive their alerts as signed webhooks or poll /alerts.

[ What’s measured vs estimated ]

Every number on this surface, with where it comes from

Where there is no measurement, the product shows nothing rather than a guess. The labels below are the ones on screen.

  • EstimatedDerived where the platform discloses nothing; labelled est.
  • MeasuredA count or a value read from the source.
  • ModelledComputed from a stated method; carries an info hint.
Ads: reach, spendLow, spendHigh
Estimates unless reachIsReal is true; countries is a targeting estimate unless countriesAreReal.
Estimated
Ads: firstSeen
When Majorka first indexed the ad, not the advertiser’s launch date.
Measured
Shops: ad counts, launches
Counted over the index.
Measured
Shops: reach, spendLow, spendHigh
Sums of per-ad estimates.
Estimated
Advertisers: activeAds, inLibrary, launches
Meta’s own running-ads count at scrape time and counts over indexed ads; reach is a sum of estimates unless reachBasis says Meta-reported.
Measured
Emails: subject, sender, sentAt
Read from real messages received by seed inboxes; kind, flow and promotion are rule-based labels.
Measured
Similar shops: score
A fixed formula over niche, shared markets and ad volume; the reasons that scored are returned with it.
Measured
Products: name, image, price, originalPrice, variants, url, store
Real listing data.
Measured
Products: ordersDaily, ordersTotal, orders30d, revenue30d
Shopify does not expose order counts.
Modelled
Freshness timestamps and row counts
Read from each pipeline’s own state table or newest stored row.
Measured
meta.usage
Lookups counted from the account’s real billing-cycle start.
Measured

[ Keep going ]

Related features and free tools

[ F.A.Q ]

Questions about API & MCP

Can’t find your answer? Email support and a human replies.

  • One lookup, whatever the page size and whatever the filters. There are no per-row credits, no per-filter charges and nothing to top up. Your own tracked stores, alerts and collections, the usage, freshness, spec and llms.txt calls, the MCP handshake and any failed request are free.

  • Sixty requests a minute per key, refilled one per second. Over it you get a 429 with Retry-After. The monthly allowance is the real ceiling and it is global.

  • No. Everything reads the indexed library. Live Meta or TikTok pulls and storefront scrapes stay in-app lookups; /system/freshness tells you when each pipeline last ran, and a shop nobody has opened yet reports its profile as not crawled.

  • Register an endpoint and secret in Settings. Each alert on a tracked store is posted once as JSON with X-Majorka-Event, X-Majorka-Delivery and an X-Majorka-Signature header carrying an HMAC-SHA256 of the raw body. The payload is documented in the OpenAPI webhooks section and in llms.txt.

  • Every paid plan. Accounts without an active paid plan cannot create keys and any key they hold returns 402 on every call.

Put the index in your workflow

One key, one lookup per request, no per-row credits, signed webhooks, a basis note on every response. Create a key in Settings.