Access and plans
- MCP (Claude, ChatGPT, Cursor, any MCP client) is on every plan. People connect by signing in with their Alertedly account and see the workspaces they belong to.
- REST is on Pro. Integrations use an API key (
alys_live_…) that an admin creates under Integrations → API keys. A key belongs to one workspace and acts with its creator's access: read, or read and write. - Send keys as
X-API-Key: alys_live_…orAuthorization: Bearer alys_live_…. People in several workspaces pick one withX-Workspace-Id(REST) or the tools'workspaceargument (MCP); otherwise it's their first (a key always uses its own). An unknown workspace is404 NO_WORKSPACE. - Without a plan (or REST on Starter) the answer is
402 PLAN_REQUIREDwith anupgrade_url, your workspace's Plan page.
MCP server
https://store.alertedly.com/mcpStreamable HTTP. In Claude: Settings → Connectors → Add custom connector, paste the URL and sign in. In ChatGPT: Open chatgpt.com/plugins, then + → Add custom MCP server: paste the server URL, choose OAuth, and sign in with your Alertedly account when asked. In Cursor: add this to ~/.cursor/mcp.json (or a project's .cursor/mcp.json) and sign in when Cursor asks. Name a store by its id, website or name.
{
"mcpServers": {
"alertedly-store": {
"url": "https://store.alertedly.com/mcp"
}
}
}| Tool | Access | What it does |
|---|---|---|
list_stores | read | The stores you track (competitor or admired), your own store, your plan's limit and which stores get the weekly brief. |
add_store | write | Track a store as a competitor or a brand you admire. Its first brief is queued as soon as it's added (once setup is finished), then it's in every weekly brief. |
remove_store | write | Stop tracking a store. Past briefs stay. |
tag_store | write | Mark a store competitor or admired. |
get_overview | read | This week across your stores: headlines, key numbers, the top signal and Your moves. |
get_brief | read | The latest weekly brief (markdown), of one store or the newest. |
list_reports | read | Past briefs, newest first in whole weeks, with whether each has an audio summary; next_cursor pages back. |
get_report | read | One brief: markdown, headline, week and the audio summary's link. |
get_catalog | read | On sale and how deep, markdowns, new products, sold out and back in stock. |
get_promotions | read | Homepage banners, announcement bar, codes, free-shipping threshold. |
get_ads | read | Meta ads (every plan) and Google ads (Pro): counts, markets, top creatives. |
get_social | read | Instagram, TikTok, YouTube, Facebook and Pinterest; Reddit on Pro. |
get_tiktok_shop | read | TikTok Shop products, prices and units. |
get_reviews | read | Google reviews (Pro): rating, count, praise and complaints. |
get_sales_calendar | read | Who was on sale, week by week, and how deep. |
get_price_changes | read | Markdowns and price moves in a week, per product, a page at a time, with totals for every store. |
compare_stores | read | Key numbers side by side, with who's highest and lowest (or all equal). |
request_free_report | write | The one-off free report on any store, to your email (one a week per email). |
get_usage | read | Your plan, stores against the limit and how many get the weekly brief, what the plan opens, calls this month and billing. |
list_team | read | Members and pending invites. |
invite | write | Invite a teammate by email (admins). Signed in, we email them; with a key you get the link. |
remove_member | write | Remove a teammate by email or id (admins; never the last admin). |
revoke_invite | write | Revoke a pending invite by email or id (admins); its link stops working. |
Try: “What did my competitors change this week?”, “Who's discounting the most?”, “Compare us with Allbirds and Mejuri”, “Track glossier.com as a brand I admire”.
REST API
https://store.alertedly.com/api/v1curl "https://store.alertedly.com/api/v1/overview" -H "X-API-Key: alys_live_…"| Method | Path | Scope | What |
|---|---|---|---|
| GET | /usage | read | Plan, limits, access, calls this month |
| GET | /overview | read | This week across your stores |
| GET | /stores | read | Tracked stores |
| POST | /stores | write | {"url", "name"?, "tag"?}: track a store (201) |
| GET | /stores/{id} | read | One store: latest report, every channel this week, 12 weeks of key numbers |
| PATCH | /stores/{id} | write | {"tag": "competitor" | "admired"} |
| DELETE | /stores/{id} | write | Stop tracking |
| GET | /stores/{id}/catalog | read | Catalog and prices |
| GET | /stores/{id}/promotions | read | Promotions |
| GET | /stores/{id}/social | read | Social channels |
| GET | /stores/{id}/tiktok-shop | read | TikTok Shop |
| GET | /stores/{id}/reviews | read | Google reviews (Pro) |
| GET | /ads | read | ?store=…: ads, every store or one |
| GET | /brief | read | ?store=…: the latest brief (markdown and HTML) |
| GET | /reports | read | ?store=…&limit=…&cursor=…: past briefs, whole weeks |
| GET | /reports/{id} | read | One brief (markdown and HTML) |
| GET | /sales-calendar | read | ?weeks=1–26: the sales calendar |
| GET | /price-changes | read | ?week=YYYY-MM-DD&store=…&kind=…&limit=…&cursor=…: price changes and totals |
| GET | /compare | read | ?stores=a.com,b.com: compare stores |
| POST | /free-reports | write | {"url"}: the free report, to your email (202). Idempotency-Key honoured |
| GET | /team | read | Members and invites |
| POST | /team/invites | write | {"email", "role"?}: invite (201, with invite_url) |
| DELETE | /team/members/{member_id} | write | Remove a member (admins; never the last admin) |
| DELETE | /team/invites/{invite_id} | write | Revoke a pending invite (admins) |
Limits and errors
- 60 requests a minute per key or person; over it,
429withRetry-After. - Errors are
{ error: { message, error_code }, request_id }:UNAUTHORIZED,PLAN_REQUIRED,INSUFFICIENT_SCOPE,NOT_FOUND,NO_BRIEF_YET,REFUSED(with the reason),RATE_LIMITED. - Numbers are from the latest weekly run. Google ads, Google reviews, Reddit and press are on Pro.
- Price changes come a page at a time: pass
next_cursorback ascursorwith the same filters. If the week was read again while you paged, the next page is409 CURSOR_STALE: start over.
Changes
- 2026-10-21: get_price_changes and GET /price-changes answer a page at a time: the default page is 50 rows (it was every row up to 200), limit 1-200, and next_cursor (opaque; pass it back as cursor) gives the next page. Each answer adds total (the rows your filters match) and totals (every change counted per store); store and kind filter on the server. list_reports pages in whole weeks with next_cursor.