# Data (https://sellersheetai.com/docs/data)
> The report tables SellerSheet keeps in sync for every connected store.
SellerSheet syncs report tables — seller, Ads and noon — that your AI queries with `query_report_data`.
## How syncing works [#how-syncing-works]
* **On a schedule, per table.** As soon as a store is connected, SellerSheet requests each report from Amazon (or noon) on that table's own cadence — shown on every table's page — and keeps the rows. Your agent never waits for Amazon to build a report: `query_report_data` answers from the stored rows in seconds and spends none of Amazon's rate limits.
* **Active marketplaces only.** Only the marketplaces active on your plan sync. A store with no active marketplace is paused and refused rather than answered from stale rows — see [Store refs](/docs/mcp-api/store-refs#paused-stores).
* **Live when it must be live.** For "right now" questions — one SKU's stock before a shipment, one order's status — your agent calls the live tool instead. See [Synced reports](/docs/mcp-api/workflows/reports).
* **No buyer personal data.** No table holds a buyer's name, e-mail or street address — see [Data we never see](/docs/start/privacy).
## Find a table [#find-a-table]
Search by table name, report type or column name. **How fresh is it?** says how often a table syncs, with its exact schedule under it. **Need it right now?** names the live tool your AI calls instead when the last sync is not recent enough — "—" where no live tool answers that table.
# How to Use Amazon Marketing Cloud (AMC) with Your Own AI (https://sellersheetai.com/guides/analyze-amazon-marketing-cloud-with-ai)
> Turn on Amazon Marketing Cloud for a store; your own AI answers new-to-brand and campaign-overlap questions and builds audiences your campaigns bid on.
Turn on Amazon Marketing Cloud (AMC) for a store on **Settings → Stores & Marketplaces**, or ask your AI to do it. Your own AI, connected through [SellerSheet MCP](/guides/connect-sellersheet-mcp), can then answer questions Ads reports can't: new-to-brand buyers by campaign, how many ads a shopper sees before buying, which campaigns reach the same people. It can write and run any AMC query, read the AMC reports SellerSheet syncs every week or four weeks, and turn a group of shoppers into an audience your campaigns bid on. It can also save a query to run every day or week. AMC always answers with totals, never a person.
## What AMC answers that Ads reports cannot [#what-amc-answers-that-ads-reports-cannot]
Amazon's Ads reports tell you what each campaign did: impressions, clicks, spend, orders. They count each campaign on its own, so they can't tell you what happened to one shopper across several ads and a purchase.
**Amazon Marketing Cloud** can. It holds your own ad events and shopping events at shopper level, and answers questions in SQL across them. With it, your AI can answer:
* **New to brand, by campaign:** how many of each campaign's buyers had never bought from your brand before.
* **Ads before buying:** how many of your ads a shopper sees, and how buying climbs with it.
* **Campaign overlap:** which pairs of campaigns reach the same shoppers, for example an Auto and a Manual campaign bidding on the same product.
* **Time to conversion:** how long after the ad the purchase comes, so you know whether a 7-day window undercounts your ads.
* **First vs last search term:** the term a buyer clicked first, and the one that got the credit in your Ads reports.
Two things AMC never gives you. It answers **only with totals** over groups of shoppers; nothing identifies a person. And it **hides any group with too few shoppers**: that group's labels come back blank, while its numbers still count in the totals. A small advertiser sees more when it groups broadly, by campaign or by theme rather than by single keyword.
Once AMC is on, your AI has three ways in: read the AMC reports SellerSheet syncs, ask AMC a question of your own, or build an audience your campaigns can use.
## Before you start [#before-you-start]
* **A SellerSheet account with the store connected and Ads authorized.** Both are on **Settings → Stores & Marketplaces** in the [SellerSheet app](https://sellersheetai.com/home); see [Stores & Marketplaces](/help/app/settings/stores).
* **An MCP client connected,** such as Claude, ChatGPT or Cursor: see [How to Connect SellerSheet MCP](/guides/connect-sellersheet-mcp).
* **Campaigns delivered in the last 28 days** in that country. Amazon offers AMC only to advertisers with recent campaigns.
* **The AMC terms accepted, once per Ads region.** Sign in at [advertising.amazon.com/marketing-cloud](https://advertising.amazon.com/marketing-cloud) with the Amazon login that connected Ads to SellerSheet, and accept the terms. Do it once for each region you advertise in: North America, Europe (which includes the Middle East and India) and Far East. This is your own agreement with Amazon, so only you can accept it; SellerSheet never clicks it for you.
* **The right access.** On the Stores page, the owner or an admin turns AMC on. Your AI needs **Ads write** access on the store for anything that creates, changes or deletes something: turning AMC on, a saved query or schedule, an audience, or an audience bid adjustment on a campaign. Running queries and reading results needs Ads read. A member gets these on the Stores page (**⋯ → Access**), and a restricted API key on **Settings → API & MCP**; see [Stay in control](/docs/mcp-api/control).
If you already have a self-service AMC instance, made in the Ads console, by Ads Agent or by another tool, SellerSheet uses that same instance. Nothing new is created. AMC accounts an agency set up for you, and paid AMC accounts, are not supported.
## Step 1: turn AMC on, per store and Ads country [#step-1-turn-amc-on-per-store-and-ads-country]
AMC is off until you turn it on, one store and one Ads country at a time. A store that advertises in the US and Canada gets one instance for each country you turn on.
Amazon has no way to delete an AMC instance. It holds only your own advertising data, and turning it on changes nothing in your campaigns, but it stays in your Ads account. That is why the Stores page warns you first, and why your AI asks before it turns AMC on.
### On the Stores page [#on-the-stores-page]
1. Open **Settings → Stores & Marketplaces** in the SellerSheet app.
2. On the store's row, open **⋯** and choose **Turn on Marketing Cloud…**. It is greyed out while the store's Ads authorization is not **Authorized**, or when every marketplace with an Ads profile already has AMC on.
3. Pick the **Marketplace** and click **Turn on**.
The **Marketing Cloud** column then shows one chip per country: **On**, **Creating** or **Failed**. Amazon can take up to five minutes to build a new instance. While it says **Creating**, open the dialog again and click **Check again**.
If the terms are not accepted yet, the dialog stays open with Amazon's own message and an **Open Amazon Marketing Cloud** link. Accept the terms there, come back, and click **Turn on** again. Every control on that page is described in [Stores & Marketplaces](/help/app/settings/stores#amc).
### Or ask your AI [#or-ask-your-ai]
"Turn on Amazon Marketing Cloud for myStore-US."
Your AI calls [`ads_amc_turn_on`](/docs/mcp-api/tools/ads_amc_turn_on) with the store and the Ads country, after asking you to confirm. Calling it again is safe: once AMC is on, it only reads. [`get_user_context`](/docs/mcp-api/tools/get_user_context) tells your AI, for each store and country, whether AMC is on, so it knows before it starts.
## Way 1: ask AMC anything [#way-1-ask-amc-anything]
Ask your question in plain words. Your AI writes the AMC SQL, runs it on your instance and reads the answer back as rows.
"Using AMC for myStore-US over the last 28 days: for each campaign, how many shoppers clicked an ad and then bought within 14 days, and how many of them were new to the brand? Group small campaigns together so AMC doesn't hide them."
What your AI does behind that prompt:
1. **Checks what is already synced.** [`list_amc_templates`](/docs/mcp-api/tools/list_amc_templates) lists the AMC reports SellerSheet keeps (Way 2). When one answers the question, your AI reads it instead of running a new query.
2. **Reads the tables.** [`ads_list_data_sources`](/docs/mcp-api/tools/ads_list_data_sources) lists the tables your instance can query; [`ads_get_data_source`](/docs/mcp-api/tools/ads_get_data_source) gives a table's columns and which ones AMC keeps private.
3. **Checks the SQL with a dry run.** [`ads_create_workflow_execution`](/docs/mcp-api/tools/ads_create_workflow_execution) with `dry_run` validates the query in seconds without computing anything or using Amazon's AMC allowance.
4. **Runs it and waits.** The same tool runs the query over the time window your AI chose; [`ads_get_workflow_execution`](/docs/mcp-api/tools/ads_get_workflow_execution) reports its status. Most queries finish within two minutes. If AMC refuses the SQL, Amazon's reason comes back and your AI fixes the query by it.
5. **Reads the answer as rows.** [`ads_get_workflow_execution_download_urls`](/docs/mcp-api/tools/ads_get_workflow_execution_download_urls) returns the result as rows, never download links, with a count of the rows AMC hid.
Your AI can also list the runs on your instance, including ones started in the AMC console or by a schedule, with [`ads_list_workflow_executions`](/docs/mcp-api/tools/ads_list_workflow_executions), and cancel one still running with [`ads_update_workflow_execution`](/docs/mcp-api/tools/ads_update_workflow_execution).
Here is the dry run from step 3, as your AI sends it:
* AMC runs up to 10 queries at a time on one instance.
* A result over 20 MB is too big to read back. Ask for broader groups, or a shorter window.
* A purchase can be credited to an ad up to 30 days after the ad ran, so per-ad numbers for the last few weeks can still grow. That is also why the four-weekly reports below wait 15 days.
## Way 2: read the synced AMC reports [#way-2-read-the-synced-amc-reports]
The common questions don't need a new query each time. For every store and country whose AMC is on, SellerSheet runs a set of proven AMC queries on a schedule and keeps their rows next to your other synced reports. Your AI reads them like any other report, with no SQL and no waiting.
| Report | The question it answers | How often |
| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | ----------------------------- |
| [rpt_amc_ntb_by_campaign](/docs/data/rpt_amc_ntb_by_campaign) | How many of each campaign's purchases came from shoppers new to the brand? | Weekly |
| [rpt_amc_hour_of_day](/docs/data/rpt_amc_hour_of_day) | At which hours of the day do clicks, spend and the purchases they lead to happen? | Weekly |
| [rpt_amc_atc_by_search_term](/docs/data/rpt_amc_atc_by_search_term) | For each search term shoppers clicked, how many added to cart and how many ordered? | Weekly |
| [rpt_amc_campaign_overlap](/docs/data/rpt_amc_campaign_overlap) | Which pairs of campaigns reach the same shoppers, and how much of each one's reach is shared? | Every 4 weeks |
| [rpt_amc_impressions_per_shopper](/docs/data/rpt_amc_impressions_per_shopper) | How many ads does a shopper see, and how does buying climb with it? | Every 4 weeks |
| [rpt_amc_ntb_gateway_asins](/docs/data/rpt_amc_ntb_gateway_asins) | Which advertised products bring shoppers to the brand for the first time? | Every 4 weeks |
| [rpt_amc_keyword_halo](/docs/data/rpt_amc_keyword_halo) | Which keywords sell the brand's other products beyond the advertised one? | Every 4 weeks |
| [rpt_amc_time_to_conversion](/docs/data/rpt_amc_time_to_conversion) | How long after the ad do purchases happen? | Every 4 weeks |
| [rpt_amc_first_vs_attributed_term](/docs/data/rpt_amc_first_vs_attributed_term) | Which search term did buyers click first, and which last before buying? | Every 4 weeks |
| [rpt_amc_path_to_conversion](/docs/data/rpt_amc_path_to_conversion) | How many different campaigns did buyers click before their first purchase? | Every 4 weeks, off by default |
| [rpt_amc_cross_sell_next_purchase](/docs/data/rpt_amc_cross_sell_next_purchase) | After a shopper's first purchase of a brand product, which product do they buy next? | Every 4 weeks, off by default |
* **Weekly** reports cover Monday to Sunday in the marketplace's own time zone. Amazon runs them each Monday.
* **Every 4 weeks** reports cover 28 days and run 15 days after the period ends, once late purchases have been attributed.
* The two reports **off by default** rarely show anything for a small Sponsored Products advertiser: most of their rows fall under AMC's privacy floor.
* **When rows first appear:** sync starts from the newest finished period, with no history before it. Weekly reports fill after the next Monday run; a four-weekly report can take up to four weeks to show its first period.
"From the synced AMC reports for myStore-US, which campaigns had the lowest new-to-brand share last week? And which campaign pairs share more than a third of their reach over the last 28 days?"
Your AI reads [`list_amc_templates`](/docs/mcp-api/tools/list_amc_templates) for each report's question, its table and how to read its rows, then queries the table with [`query_report_data`](/docs/mcp-api/tools/query_report_data) ([`get_table_schema`](/docs/mcp-api/tools/get_table_schema) gives the columns). Because the rows sit beside your other reports, it can combine them in one answer, for example new-to-brand share next to the campaign's spend and sales.
### Three rules for reading the rows [#three-rules-for-reading-the-rows]
* **One hidden row per period.** Each period has one row with `hidden` set to true. It adds up everything AMC suppressed under its privacy floor, so totals still match. It has no labels: include it in totals, leave it out of per-campaign or per-term answers. A count of distinct shoppers summed into it can count one shopper twice.
* **`period_start` is the first day of the period,** in the marketplace's time zone, not a day of activity. `period_days` says whether the period is 7 or 28 days long.
* **AMC purchases count only the advertised product.** The purchases in your Ads reports also count your brand's other products bought after the ad, so the AMC number is usually lower. It measures something different; it is not wrong.
## Way 3: build an audience for your campaigns [#way-3-build-an-audience-for-your-campaigns]
An answer tells you who your shoppers are. An audience lets you act on it: AMC turns a group of shoppers into an audience in your Ads account, and a campaign can adjust its bids for the shoppers in it. There are two kinds:
* **Rule-based:** the shoppers an AMC query selects, for example "shoppers who added a product to their cart in the last 30 days but didn't buy".
* **Lookalike:** shoppers Amazon finds to be similar to a seed the query selects, for example everyone your ads reached.
"For myStore-US, build an audience of the shoppers who added one of my products to their cart in the last 30 days but didn't buy. If that's too small, propose a lookalike instead. Show me the plan before you create anything."
What your AI does behind that prompt:
1. **Counts first.** It counts the same shoppers with [`ads_create_workflow_execution`](/docs/mcp-api/tools/ads_create_workflow_execution), so it knows whether the audience can pass Amazon's minimum size (below).
2. **Proposes, then waits for your yes.** It shows you the audience it plans: who is in it, roughly how many, over which days. The audience tools are gated, so nothing is created before you agree.
3. **Creates it.** [`ads_create_query_based_audience`](/docs/mcp-api/tools/ads_create_query_based_audience) makes a rule-based audience; [`ads_create_lookalike_audience`](/docs/mcp-api/tools/ads_create_lookalike_audience) makes a lookalike, where you also choose how far from the seed it reaches, from `MOST_SIMILAR` to `MOST_BROAD`.
4. **Waits for Amazon.** [`ads_get_query_based_audience_by_audience_execution_id`](/docs/mcp-api/tools/ads_get_query_based_audience_by_audience_execution_id) follows the build: RUNNING, then SUCCEEDED or FAILED. A rule-based audience usually takes 15–20 minutes and a lookalike up to about 90; a long RUNNING is normal for one that succeeds. [`ads_get_all_query_based_audiences_by_instance_id`](/docs/mcp-api/tools/ads_get_all_query_based_audiences_by_instance_id) lists every audience on your instance, including ones made in the AMC console.
5. **Finds it in your Ads account.** Amazon activates a SUCCEEDED audience within 2–24 hours. It then appears in [`ads_list_targetable_entities`](/docs/mcp-api/tools/ads_list_targetable_entities), for Sponsored Products under **Audience Category › Custom-built › AMC**, with the audience ID a campaign takes.
6. **Adds it to a campaign.** With your go-ahead, your AI adds the audience to a campaign as an audience bid adjustment, with [`ads_update_campaign`](/docs/mcp-api/tools/ads_update_campaign). A campaign takes up to 10 audiences.
* **A rule-based audience needs at least 2,000 shoppers;** aim for 2,500. Below that, Amazon builds it for 15–20 minutes and then it ends FAILED: "did not meet the minimum required size". A small store's buyers or ad clickers are usually far below the floor.
* **A lookalike needs a seed of 500 to 500,000 shoppers, and a count above 500 is not enough.** Amazon keeps only the shoppers it can match, so a seed of a few hundred ad clickers can still end FAILED after about 20 minutes: "did not find a sufficient match for seed users".
* **On a small store, seed the lookalike with reach:** the tens of thousands of shoppers your ads were shown to. At the closest setting, `MOST_SIMILAR`, Amazon aims for about 500,000 to 1 million similar shoppers in Europe and the Americas, and 200,000 to 300,000 in Asia.
### Changing or removing an audience [#changing-or-removing-an-audience]
* **A SUCCEEDED audience can't be edited, only deleted,** with [`ads_delete_query_based_audience_by_audience_execution_id`](/docs/mcp-api/tools/ads_delete_query_based_audience_by_audience_execution_id). Take it out of every campaign first. Deleting can't be undone, so your AI asks you before it does.
* **A FAILED audience can be fixed and run again** with [`ads_update_query_based_audience_by_audience_execution_id`](/docs/mcp-api/tools/ads_update_query_based_audience_by_audience_execution_id): a new time window, or new SQL.
* **Amazon refreshes an audience on its own.** One that no campaign uses is refreshed less often and switched off after about 100 days.
* **Every audience query is logged,** like every other AMC query SellerSheet runs.
## Save a query and run it on a schedule [#save-a-query-and-run-it-on-a-schedule]
When a question is worth asking every week, your AI can save its query on your instance and have Amazon run it on a schedule. For the questions the synced reports already answer (Way 2), you don't need this.
"Save the new-to-brand query we just ran for myStore-US and run it every Monday. Create the schedule paused, and show me the first run before you turn it on."
1. **Save the query.** Your AI checks the SQL with a dry run first, then saves it under a name with [`ads_create_workflow`](/docs/mcp-api/tools/ads_create_workflow). [`ads_list_workflows`](/docs/mcp-api/tools/ads_list_workflows) and [`ads_get_workflow`](/docs/mcp-api/tools/ads_get_workflow) read the saved queries. [`ads_update_workflow`](/docs/mcp-api/tools/ads_update_workflow) replaces one, and every schedule that runs it uses the new SQL from then on. [`ads_delete_workflow`](/docs/mcp-api/tools/ads_delete_workflow) removes one once no schedule runs it; its past runs stay.
2. **Schedule it,** Daily or Weekly, with [`ads_create_schedule`](/docs/mcp-api/tools/ads_create_schedule). A schedule can be created paused and turned on later with [`ads_update_schedule`](/docs/mcp-api/tools/ads_update_schedule), which also changes its period. [`ads_list_schedules`](/docs/mcp-api/tools/ads_list_schedules) and [`ads_get_schedule`](/docs/mcp-api/tools/ads_get_schedule) read them; [`ads_delete_schedule`](/docs/mcp-api/tools/ads_delete_schedule) removes one and keeps its saved query.
3. **Read each run in time.** Every run appears in [`ads_list_workflow_executions`](/docs/mcp-api/tools/ads_list_workflow_executions). Its result can be downloaded for about a day, so your AI reads it with [`ads_get_workflow_execution_download_urls`](/docs/mcp-api/tools/ads_get_workflow_execution_download_urls) before it expires.
Saving, changing or deleting a query or a schedule changes your instance, so your AI asks you first.
The saved queries and schedules behind the synced reports show up in the same lists, named `sellersheet_…`. The tools refuse to change, delete, re-schedule or cancel them. They are SellerSheet's, so leave them as they are; removing the store from SellerSheet deletes them.
## Browse what campaigns can target [#browse-what-campaigns-can-target]
[`ads_list_targetable_entity_paths`](/docs/mcp-api/tools/ads_list_targetable_entity_paths) lists the taxonomy paths of what a sponsored-ads campaign can target, and [`ads_list_targetable_entities`](/docs/mcp-api/tools/ads_list_targetable_entities) lists what sits under one; for example, your AMC audiences under **Audience Category › Custom-built › AMC**.
## What you see in Amazon's own screens [#what-you-see-in-amazons-own-screens]
SellerSheet works inside your own AMC instance, so its work shows in the AMC console:
* **Its queries and runs.** The queries your AI runs, and the runs that fill the synced reports, appear in the instance's run list.
* **Saved queries and schedules:** your own, and SellerSheet's, named `sellersheet_…`, which run the weekly reports. The tools never change SellerSheet's; leave them as they are in the console too.
* **The audiences your AI creates,** listed in the instance, and once active in your Ads account under Custom-built › AMC.
* **Amazon sees the queries,** as it sees every query run in AMC.
Your AMC results are yours and confidential under Amazon's AMC terms. SellerSheet uses a store's results only for that store: never shared with another store, and never pooled into benchmarks. It keeps the synced rows for 13 months.
## What isn't available [#what-isnt-available]
* **Amazon's AMC SQL generator**, which Amazon offers as a closed beta. Today your AI writes the SQL itself, checks it against your instance's own table descriptions and with a dry run, and fixes it from Amazon's reason when AMC refuses it.
* **Managed-account features:** AMC's Clean Rooms collaborations, adding advertisers, and creating or deleting instances are not available on an instant instance. AMC Custom Models is offered by Amazon in North America only.
## Which way do you need? [#which-way-do-you-need]
| What you need | Ask your AI to… | Tools behind it |
| ------------------------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| AMC on for a store and country | Turn on Amazon Marketing Cloud for the store | `ads_amc_turn_on` (or the Stores page) |
| A common question: new to brand, overlap, hour of day, time to conversion | Answer from the synced AMC reports | `list_amc_templates`, `query_report_data` |
| A question of your own | Write and run an AMC query | `ads_create_workflow_execution`, `ads_get_workflow_execution`, `ads_get_workflow_execution_download_urls` |
| A run that's taking too long, or was started by mistake | Find it and cancel it | `ads_list_workflow_executions`, `ads_update_workflow_execution` |
| Shoppers to bid on: cart abandoners, past buyers, or people like them | Build an audience and add it to a campaign | `ads_create_query_based_audience`, `ads_create_lookalike_audience`, `ads_list_targetable_entities`, `ads_update_campaign` |
| The same question every day or week | Save the query and schedule it | `ads_create_workflow`, `ads_create_schedule`, `ads_list_workflow_executions` |
## FAQ [#faq]
### What does Amazon Marketing Cloud answer that Ads reports cannot? [#what-does-amazon-marketing-cloud-answer-that-ads-reports-cannot]
Questions that follow the same shopper across ads and purchases: how many of a campaign's buyers were new to your brand, how many ads a shopper saw before buying, which campaigns reach the same people, how long after the ad the purchase came, and which search term a buyer clicked first versus last. Ads reports total each campaign on its own, so they cannot answer these.
### Does AMC show me individual shoppers? [#does-amc-show-me-individual-shoppers]
No. AMC answers only with totals over groups of shoppers, and it hides any group with too few shoppers in it. Nothing in a result identifies a person.
### Can I turn AMC off or delete it? [#can-i-turn-amc-off-or-delete-it]
Amazon cannot delete an AMC instance once it exists, which is why the Stores page warns you and your AI asks before turning it on. The instance only holds your own advertising data and changes nothing in your campaigns. If you remove the store from SellerSheet, SellerSheet deletes its saved queries and schedules from the instance; the instance itself stays in your Ads account.
### I already use AMC in the Ads console. Will SellerSheet create a second instance? [#i-already-use-amc-in-the-ads-console-will-sellersheet-create-a-second-instance]
No. If you already have a self-service AMC instance, made in the Ads console, by Ads Agent or by another tool, turning AMC on in SellerSheet finds that instance and uses it. AMC accounts set up for you by an agency, or a paid AMC account, are not supported.
### Why do AMC purchases differ from my Ads reports? [#why-do-amc-purchases-differ-from-my-ads-reports]
AMC counts purchases of the advertised product only. The purchases in Amazon's Ads reports also count your brand's other products bought after the ad. The two numbers measure different things, so AMC's is usually lower.
### Do I need to know SQL? [#do-i-need-to-know-sql]
No. You ask in plain words. Your AI first checks whether a synced AMC report already answers the question; if not, it writes the SQL, checks it with a dry run and fixes it from Amazon's reason if AMC refuses it.
### Can my AI build audiences from AMC? [#can-my-ai-build-audiences-from-amc]
Yes, but only after you say yes. It can create a rule-based audience, the shoppers an AMC query selects (at least 2,000 of them), or a lookalike audience, shoppers similar to a seed of 500 to 500,000. Once Amazon activates it in your Ads account, within 2–24 hours, your AI can add it to a campaign as an audience bid adjustment. On a small store, a lookalike seeded with the shoppers your ads reached is usually the one that works.
# How to Use SellerSheet MCP to Manage Amazon Ads Budgets (https://sellersheetai.com/guides/automate-amazon-ads-budgets-in-google-sheets)
> Let an AI agent watch your Amazon PPC budget usage, apply Amazon's budget recommendations, and set schedule- and performance-based budget rules for Prime Day and peak days — all from Google Sheets via SellerSheet MCP.
Connect an AI client to [SellerSheet MCP](/guides/connect-sellersheet-mcp) and tell it what you want in plain language: "check today's budget usage for myStore-US", "set a Prime Day rule at Amazon's suggested percentage", or "raise budget 25% while ACOS is under 20%". The agent calls the Amazon Ads Budget APIs for you — live usage, official recommendations, and schedule- or performance-based budget rules that revert automatically — and writes every plan and result into your Google Sheet for review.
## Introduction [#introduction]
Two budget problems eat more PPC revenue than any bad keyword. Campaigns run out of budget at lunchtime and sit dark all afternoon — and you only find out the next day. And shopping events arrive with no budget headroom because someone forgot to raise the caps the night before.
Amazon's Ads API has an answer for both: the **Budget Usage** API for live intraday consumption, and **Budget Rules** — automatic, self-reverting daily-budget increases driven by a schedule, a shopping event, or a performance metric. SellerSheet exposes this whole family as MCP tools, so your AI agent (Claude, ChatGPT, or any MCP client) can run the entire workflow for you, with your Google Sheet as the audit trail:
* `ads_campaigns_budget_usage` / `ads_portfolio_budget_usage` — live budget consumption for SP / SB / SD campaigns and portfolios.
* `ads_create_budget_rules_for_campaigns` / `ads_update_budget_rules_for_campaigns` / `ads_create_associated_budget_rules_for_campaigns` — create, update (also pauses, via `ruleState: PAUSED`), and associate schedule- or performance-based rules (SP / SB / SD).
* `ads_get_budget_rules_recommendation` — Amazon's upcoming shopping events with suggested increase percentages (SP / SB).
* `ads_sp_get_budget_recommendations` / `ads_sb_get_budget_recommendations` / `ads_get_sd_budget_recommendations` — suggested budgets plus missed-impression/click/sales estimates.
* `ads_get_budget_recommendation` — a starting daily budget for a campaign you haven't created yet.
Everything in this guide follows Amazon's official budget-rules documentation and has been verified end-to-end against the live Amazon Ads API across all three ad products, then put through a dedicated hardening pass so that a request the AI gets wrong is refused outright rather than half-applied. Where Amazon limits a capability to certain products or marketplaces, we say so.
## Prerequisites [#prerequisites]
* **A SellerSheet account** with your Amazon store connected and **Advertising authorized** — both under **Settings → Stores & Marketplaces** in the [SellerSheet app](https://sellersheetai.com/home). The Ads consent is separate from Seller Central.
* **An MCP client connected** — follow [How to Connect SellerSheet MCP](/guides/connect-sellersheet-mcp) (Claude, ChatGPT, Cursor, and others).
* **Ads write access** on the store for the API key your AI uses — reading usage and recommendations only needs read access, but creating or changing rules needs write. The store owner grants this per key under **Settings → API & MCP**.
## Workflow 1 — The morning budget check [#workflow-1--the-morning-budget-check]
Your best campaign burned its whole budget by 1 PM and served nothing all afternoon. Yesterday's reports won't show it — they aggregate by day. By the time you notice in Seller Central, you've lost another afternoon of traffic.
`ads_campaigns_budget_usage` / `ads_portfolio_budget_usage` return **live intraday consumption** — the one number daily reports can't give you. Ask your AI:
"Check today's budget usage for all campaigns in myStore-US. Flag anything above 80%, and suggest adjustments based on the last 7 days of spend and sales."
The agent queries your campaigns, calls the usage endpoint, and writes a table into your sheet: campaign, budget, **percent consumed**, and the timestamp Amazon last evaluated usage. Campaigns near 100% are your action list — either a manual raise or, better, a budget rule (Workflows 2–3) so it never happens again.
### What the usage data means [#what-the-usage-data-means]
* **budgetUsagePercent:** spend as a percentage of the currently available budget (87.5 = 87.5% consumed).
* **usageUpdatedTimestamp:** when Amazon last evaluated usage — the figure is fresh but not second-by-second.
* **Coverage:** SP, SB, and SD campaigns, plus portfolios — up to 100 IDs per call (the agent chunks larger sets automatically).
* **Portfolios:** only portfolios with a budget cap report a meaningful percentage.
## Workflow 2 — Schedule rules for Prime Day and peak days [#workflow-2--schedule-rules-for-prime-day-and-peak-days]
Prime Day traffic tripled — and your campaigns went dark by 10 AM because the budgets were set for a normal Tuesday. Or you did remember to raise them, and then forgot to set them back, quietly overspending for a week.
A **schedule-based budget rule** (`ruleType: SCHEDULE`) raises the daily budget by a percentage you choose, for a window you choose, and **reverts automatically** when the window ends. Three flavors, straight from Amazon's schedule-based rules guide:
* **Custom date range** — "December 1–15, +50%". Works on SP, SB, and SD.
* **Recommended shopping event** — Amazon lists upcoming events (Prime Day, Black Friday…) per campaign with a suggested increase percentage; the rule binds to the event, so if Amazon shifts the dates, the rule follows. Events are offered for SP and SB campaigns.
* **Recurring days** — "every Friday–Sunday, +20%" (weekly recurrence on SB and SD; Sponsored Products rules run on daily recurrence). Amazon also supports intraday time windows on schedule rules in the US, CA, UK, IN, and JP marketplaces.
"Which official shopping events are coming up for my main campaigns in myStore-US? Create an event budget rule for each at Amazon's suggested percentage, and associate them — write the plan to my sheet first so I can confirm."
Behind that prompt the agent runs the exact three-step sequence Amazon's guide describes: fetch event recommendations (`ads_get_budget_rules_recommendation` returns each event's ID, dates, and suggested increase), create the rule with `ads_create_budget_rules_for_campaigns` using the event ID, then associate the rule to each campaign with `ads_create_associated_budget_rules_for_campaigns`. One rule can serve many campaigns, and each step's result lands in your sheet.
Event recommendations exist for Sponsored Products and Sponsored Brands only (Amazon provides none for Sponsored Display), and the SB variant is marketplace-gated — available in the US, but not yet in some marketplaces (we've confirmed AE and AU return "unsupported marketplace"). An empty event list simply means no events are coming up — that's normal, not an error.
## Workflow 3 — Performance rules: let the data raise the budget [#workflow-3--performance-rules-let-the-data-raise-the-budget]
A campaign is converting beautifully — ACOS 15%, well under target — and it's budget-capped. Every day you don't raise the budget is profitable traffic handed to a competitor. But you can't watch every campaign's metrics every day.
A **performance-based rule** (`ruleType: PERFORMANCE`) raises the budget only while a metric beats your threshold: "while ACOS \< 20%, budget +25%". Amazon evaluates the metric over the trailing **7 days for sellers** (14 for vendors). If the condition stops holding, the increase stops — the decision to spend more stays tied to the data.
"Create a performance rule for the bedding-series SP campaigns in myStore-US: raise budget 25% while ACOS is below 20%. Write it to the sheet for my confirmation first."
### Available metrics differ by ad product [#available-metrics-differ-by-ad-product]
* **Sponsored Products / Display:** ACOS, CTR, CVR, ROAS.
* **Sponsored Brands:** top-of-search impression share (IS), new-to-brand % (NTB), and ROAS — **not** ACOS/CTR/CVR. (IS is unavailable for campaigns with video creatives.)
* **Operators:** greater/less than (or equal); `EQUAL_TO` exists on Sponsored Products only.
* **Minimum budget:** Amazon requires a minimum daily budget for performance rules to activate, so there's enough traffic to compute the metrics.
If several rules on one campaign are satisfied at once, Amazon applies **all of them additively** — a +40% performance rule plus a +100% Black Friday rule means +140% that day. A campaign can hold up to 250 rules. Before adding one, have your AI list the campaign's existing rules ("what budget rules are on this campaign?") so increases don't compound by accident.
## Workflow 4 — Right-size budgets with Amazon's own numbers [#workflow-4--right-size-budgets-with-amazons-own-numbers]
"Is my daily budget enough?" For a new campaign you're guessing; for a running one you can't see the sales you *didn't* get because the budget ran out. Both answers exist — Amazon computes them — but they're buried in the API.
Two kinds of read-only tool surface Amazon's estimates:
* **Running campaigns** — `ads_sp_get_budget_recommendations` / `ads_sb_get_budget_recommendations` / `ads_get_sd_budget_recommendations` return a suggested daily budget per campaign plus the **missed impressions, clicks, and sales** Amazon estimates you're forfeiting at the current budget (up to 100 campaigns per call).
* **New campaigns** — `ads_get_budget_recommendation` takes your ASINs, targeting type, and bids *before* the campaign exists and returns a starting daily budget that shouldn't throttle delivery in week one. Sponsored Products only.
"For my Sponsored Brands campaigns in myStore-US: if I raised budgets, how many extra impressions and sales would I get? Put each campaign's suggested budget and missed-opportunity numbers in a table."
Pair every recommendation with Workflow 1. A campaign that never gets near its cap doesn't need a raise no matter what the recommendation says — spend the headroom where usage runs hot.
## Workflow 5 — Verify what your rules actually did [#workflow-5--verify-what-your-rules-actually-did]
You set the rules and… then what? Automation you can't audit is automation you'll eventually turn off. You need to see which rules fired, what budget was actually in force, and whether the extra budget converted.
Amazon evaluates budget rules **at the start of each day in the marketplace's own timezone** (and re-evaluates immediately whenever a rule or the campaign's budget changes) — so "today" means the ad profile's day, not yours. Each rule carries a status you can read back: *Active*, *On Hold* (condition not currently met), *Paused*, *Budget threshold not met*, *Pending Start*, or *Expired*. Three ways to audit, in order of immediacy:
* **List the rules on a campaign** — `ads_list_associated_budget_rules_for_campaigns` shows every associated rule with its status. This is Amazon's own recommended source of truth: because rules stack, the single "applicable rule" field elsewhere can be incomplete.
* **Watch usage during the window** — re-run Workflow 1 while a rule is active to confirm the raised budget is being consumed (i.e., the increase is buying real traffic).
* **Pull the audit columns in a report** — for Sponsored Products, the campaigns report (`ads_create_async_report`, report type `spCampaigns` grouped by campaign) includes `campaignRuleBasedBudgetAmount`, `campaignApplicableBudgetRuleId`, and `campaignApplicableBudgetRuleName` — the rule-based budget that was in force, day by day, next to spend and sales.
"For myStore-US, list the budget rules on each of my SP campaigns with their status, then pull last week's campaign report with the rule-based budget columns and summarize which rules fired and what they cost."
Older Amazon docs describe auditing rule-based budgets via the Snapshots API. Amazon deprecated Snapshots (shut off October 2024) — use the two working paths above instead: list the rules on the campaign, and pull the rule-based budget columns in the campaigns report.
## Which workflow do you need? [#which-workflow-do-you-need]
| What you need | Ask your AI to… | Tool behind it | Ad products |
| -------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------ |
| Know who's about to run out of budget today | Check today's budget usage | `ads_campaigns_budget_usage` / `ads_portfolio_budget_usage` | SP / SB / SD / portfolios |
| Survive Prime Day / peak dates automatically | Set an event or date-range budget rule | `ads_create_budget_rules_for_campaigns` (+ event recs) | SP / SB / SD (events: SP / SB) |
| Feed winners without watching dashboards | Set a performance rule on a metric threshold | `ads_create_budget_rules_for_campaigns` | SP / SB / SD |
| Decide whether a raise is worth it | Get suggested budgets + missed-opportunity estimates | `ads_sp_get_budget_recommendations` / `ads_sb_get_budget_recommendations` / `ads_get_sd_budget_recommendations` | SP / SB / SD |
| Pick a launch budget for a new campaign | Ask for the initial budget recommendation | `ads_get_budget_recommendation` | SP only |
| Audit which rules fired and what they cost | List rules per campaign + pull the report audit columns | `ads_list_associated_budget_rules_for_campaigns` + `ads_create_async_report` | All (report columns: SP) |
## Good to know before you automate [#good-to-know-before-you-automate]
* **Rules only ever increase, by percent, inside their window.** Your base budget is never permanently modified; outside the window everything is exactly as you set it.
* **There is no delete.** Amazon's API has no rule-delete operation — pause a rule or disassociate it from the campaign; both stop it cold.
* **Review before write.** A well-prompted agent writes the rule plan to your sheet and waits for your confirmation before creating anything — the prompts in this guide ask for exactly that.
* **Rules are attached one campaign at a time.** Amazon's bulk-association shortcut isn't available to third-party tools (we tested it across three ad accounts and marketplaces), so the agent associates each campaign individually — same end result, nothing for you to do differently.
* **New rules start as Pending Start — and stay there a while.** A rule created for a future window shows *Pending Start* until its window opens, and in our live testing it took a few hours past marketplace midnight to flip to *Active*. That's expected. Don't re-create a rule that hasn't turned Active yet on event morning — you'd end up with two, and their increases stack.
* **A wrong request fails cleanly, not halfway.** If the AI sends a malformed budget request, it comes back rejected with the exact field and the allowed values — so the agent corrects itself and retries, instead of leaving a half-applied change on your account.
## FAQ [#faq]
### What are Amazon Ads budget rules? [#what-are-amazon-ads-budget-rules]
Budget rules automatically increase a campaign's daily budget by a percentage you choose — either on a schedule (a date range or an Amazon shopping event like Prime Day) or when a performance metric such as ACOS or ROAS beats a threshold. When the window or condition ends, the budget reverts to normal on its own. They are supported for Sponsored Products, Sponsored Brands, and Sponsored Display.
### Can budget rules lower my budget? [#can-budget-rules-lower-my-budget]
No. Budget rules only increase the daily budget, by a percentage, inside the window you define. Outside the window your original budget applies unchanged — nothing is permanently modified.
### Which metrics can performance-based rules use? [#which-metrics-can-performance-based-rules-use]
Sponsored Products and Sponsored Display support ACOS, CTR, CVR, and ROAS. Sponsored Brands uses a different set: top-of-search impression share (IS), new-to-brand percentage (NTB), and ROAS. Metrics are computed over the previous 7 days for sellers (14 for vendors).
### What happens if several rules apply to one campaign at once? [#what-happens-if-several-rules-apply-to-one-campaign-at-once]
Every rule whose condition is met applies, and their percentage increases are added together on top of the daily budget. A campaign can carry up to 250 rules, so it's worth listing a campaign's rules before adding another.
### How do I delete a budget rule? [#how-do-i-delete-a-budget-rule]
Amazon's API has no delete operation for budget rules. Instead, pause the rule (set its state to `PAUSED`) or disassociate it from the campaign — either one stops it from affecting budgets.
### Do I need special permissions to manage budget rules with AI? [#do-i-need-special-permissions-to-manage-budget-rules-with-ai]
Viewing budget usage, rules, and recommendations needs read access to the store's Ads data. Creating, updating, associating, or pausing rules requires **Ads write access**, which the store owner grants per API key under **Settings → API & MCP** in the SellerSheet app.
### What happens if the AI sends a bad budget request? [#what-happens-if-the-ai-sends-a-bad-budget-request]
It is refused before anything changes on your account, with a message naming the exact field that was wrong and the values Amazon accepts. The agent reads that, corrects the request, and retries — so a mistake costs a round trip, not a half-applied budget change you have to unpick.
# How to Bulk Add Up to 25,000 Existing ASINs to Your Amazon Catalog (https://sellersheetai.com/guides/bulk-add-existing-asins-to-your-catalog)
> Add products that already exist on Amazon to your own catalog in bulk from Google Sheets — check eligibility, pair your SKUs with the ASINs, and submit them in one feed.
Want to sell products that already exist on Amazon? In Seller Central, you'd search for each ASIN, click "Sell this product," fill in your offer, and repeat — one at a time. For a catalog of hundreds or thousands of products, that's hours of manual work.
SellerSheet lets you **add up to 25,000 existing ASINs to your catalog in a single submission** from Google Sheets. The whole process takes three steps:
1. **Check eligibility** — verify you're approved to sell each ASIN.
2. **Fill in SKUs & ASINs** — set productType to `PRODUCT` and add your SKU/ASIN pairs.
3. **Submit to Amazon** — one click, up to 25,000 SKUs per submission.
## Prerequisites [#prerequisites]
* **Store connected:** your Amazon store is connected under **Settings → Stores & Marketplaces** in the [SellerSheet app](https://sellersheetai.com/home).
* **Sidebar installed:** the SellerSheet add-on is installed in Google Sheets. If not, follow [Install & first sync](/help/sheets/install).
* **A list of ASINs:** the ASINs you want to add, plus your own SKU for each.
## Step 1: Check selling eligibility [#step-1-check-selling-eligibility]
Some ASINs are restricted — they require approval, brand gating, or category ungating before you can sell them. Finding out after submission wastes time, and in Seller Central you'd have to check each one individually.
Before adding ASINs, check that you're approved to sell them with the **Restriction Check** sheet in your SellerSheet Catalog spreadsheet:
1. Go to the **Restriction Check** sheet tab.
2. Enter your stores and ASINs in the **Store** and **ASIN** columns, and pick a **Reason Locale** (the language of Amazon's reasons) on every row.
3. Click **Get Restrictions** in the sidebar.
4. Review the **Status** column — `ALLOWED` ASINs are ready to add. `APPROVAL_REQUIRED` rows have an **Approval Link** to apply in Seller Central, and `RESTRICTED` rows say why in **Reasons**.
Paste all your ASINs at once — SellerSheet checks them in bulk. For a detailed walkthrough, see [How to Bulk Check ASIN Selling Eligibility](/guides/check-asin-selling-eligibility-in-google-sheets).
## Step 2: Prepare and fill in your SKUs [#step-2-prepare-and-fill-in-your-skus]
Now switch to the **Publish Queue** sheet tab. Since you're adding existing products (not creating new ones), the setup is minimal:
1. Set **Store** (A3) and **Listing Locale** (B3) for your marketplace.
2. Write `PRODUCT` in the **Product Type** column (D) for each row, from row 7 down.
3. Click **Get Template** in the sidebar — this loads the PRODUCT template (very few columns needed).
4. Set **Operation Type** to `UPDATE` in column C for each row.
5. Fill in your **SKU** (column B) — your own identifier for each product.
6. Fill in the ASIN of each row in its **Merchant Suggested ASIN** column.
### Why productType = PRODUCT? [#why-producttype--product]
`PRODUCT` is the simplest productType — designed for matching existing catalog products. Since the product already exists on Amazon (with title, brand, images and so on), you only need to provide your SKU and the ASIN. Amazon handles the rest.
Optionally, you can also fill in your offer (price) and the condition (new/used) if you want to set them during submission.
Have your SKU/ASIN list ready in another sheet tab or file. After Get Template loads the columns, paste your data into the right columns — no manual entry needed.
## Step 3: Submit and track results [#step-3-submit-and-track-results]
Which button you click depends on how many SKUs you're submitting:
| SKU count | Action | Processing |
| ---------------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------------- |
| Up to 20 SKUs | **Validate (Preview)** (dry run), then **Create/Replace/Del.** | Immediate — per-SKU results appear in the Submission Log |
| 20 – 25,000 SKUs | **Submit Feed** | Amazon queue — the feed is recorded in the Submission Log; click **Refresh Status** to check |
### Tracking your submission [#tracking-your-submission]
1. Go to the **Submission Log** sheet tab.
2. Find your submission row.
3. For Submit Feed: click **Refresh Status** in the sidebar until the **Feed Status** shows the feed is finished.
4. Check the **Result** and **Issues** columns — they show success or error details for each SKU.
Submit Feed accepts up to **25,000 rows** per submission, but the total payload must stay under **10 MB**. Since PRODUCT listings are lightweight (just SKU + ASIN), you can typically reach the row limit without hitting the size limit.
## Tips for maximum efficiency [#tips-for-maximum-efficiency]
* **Always check restrictions first:** submitting restricted ASINs wastes time. Check eligibility in the Restriction Check sheet before filling in the Publish Queue.
* **Batch your submissions:** prepare all your SKU/ASIN pairs in the sheet first, then submit in one click. No need to submit row by row.
* **Update price or title later with PARTIAL_UPDATE:** once your ASINs are in your catalog, use the `PARTIAL_UPDATE` operation type to update specific attributes like price, title or images without re-submitting everything.
* **Need full listing control?** See [How to Bulk Create & Revise Amazon Listings](/guides/bulk-create-revise-amazon-listings-in-google-sheets) for creating new listings, updating attributes, managing variations and cross-marketplace expansion. Every button of the panel is listed on [Catalogs](/help/sheets/sellers/catalogs).
# How to Bulk Create Invoices for Amazon Customers in Google Sheets (https://sellersheetai.com/guides/bulk-create-invoices-for-amazon-customers-in-google-sheets)
> Generate VAT invoices or receipts for your Amazon customers in bulk, straight from your synced order data in Google Sheets, with your own branding and tax details.
Generating professional invoices for Amazon customers can be a time-consuming manual task. SellerSheet automates the whole process: you create VAT invoices or receipts in bulk, directly from your synced order data in Google Sheets.
## Step 1: Configure store information [#step-1-configure-store-information]
Before generating invoices, set up your business branding and tax details in the **Store Info** sheet of the SellerSheet Sales spreadsheet. This data fills your invoice headers.
| Column | Type | Description | Sample |
| ------------- | -------- | ---------------------------------------------------------- | --------------- |
| StoreName | Required | Primary identifier. Must match a connected store. | myStore-AE |
| Company | Required | Legal entity name for the invoice header. | The Company LLC |
| TRN / TaxRate | Optional | If empty, a receipt is generated instead of a VAT invoice. | 123… / 5% |
### Invoice type logic [#invoice-type-logic]
SellerSheet uses the presence of **TRN** and **TaxRate** to decide the invoice type:
* **RECEIPT (REC):** created if TRN or TaxRate is missing.
* **VAT INVOICE (INV):** created only if **both** TRN and TaxRate are provided.
\[\[TODO: screenshot Store Info sheet configuration (retake — the old one showed real store data)]]
## Step 2: Generate bulk invoices [#step-2-generate-bulk-invoices]
Once your store information is configured, generate invoices by providing order and customer details in the **Invoices** sheet.
### Invoice prerequisites [#invoice-prerequisites]
* **Store match:** the store in the **Store** column must exist in the **Store Info** sheet.
* **Order match:** the **Amazon Order ID** must already exist in your **Orders** sheet (synced from the Sales panel — see [How to Sync Amazon Orders](/guides/sync-amazon-orders-to-your-google-sheets)).
* **Shipped orders:** the order must be shipped.
### Filling customer data [#filling-customer-data]
Fill in these columns for each order you want to invoice:
* **Customer Name:** the name that appears on the invoice.
* **Customer TRN:** required for VAT invoices only.
* **Customer Address:** ship-to or billing address.
* **Invoice Time:** optional. If left blank, the current time is used.
### Triggering creation [#triggering-creation]
1. Go to the **Sales** panel in the SellerSheet sidebar.
2. In the **Invoices** dropdown, click **Create Invoices**.
SellerSheet goes through the active sheet and generates a PDF invoice in Google Drive for every valid row.
\[\[TODO: screenshot Invoices sheet populated with orders ready for bulk invoicing (retake — the old one showed real store data)]]
### Automation results [#automation-results]
* **Auto-populated links:** once created, the **Invoice Link** and **Invoice Folder** columns fill in automatically.
* **Folder logic:** invoices are stored in a nested structure, `SellerSheet/{Store}/{Marketplace}/{Year}/{Month}` (for example `SellerSheet/myStore/AE/2025/07`).
### Limits and scope [#limits-and-scope]
* **Runtime limits:** Google Sheets sidebars have a standard execution limit. If you have hundreds of invoices and the process stops, click **Create Invoices** again to resume.
* **Active sheet scope:** the action only processes the sheet you are currently viewing.
* **Skipping logic:** if an **Invoice Link** already exists for a row, SellerSheet skips it to prevent duplicates.
If invoicing times out because of Google's limits, your progress is saved. Click the button again — it picks up where it left off by skipping rows that already have links.
## Conclusion [#conclusion]
With SellerSheet's bulk invoicing, you keep professional communication with your customers while your tax paperwork runs on its own. Every button of the panel is listed on [Sales](/help/sheets/sellers/sales).
# How to Bulk Create & Revise Amazon Listings in Google Sheets (https://sellersheetai.com/guides/bulk-create-revise-amazon-listings-in-google-sheets)
> Create, update and delete Amazon listings in bulk from Google Sheets — Seller Central's template columns, with Amazon's check before anything goes live.
* The **Publish Queue** tab is Seller Central's category template inside Google Sheets: same columns, one row per SKU.
* **Get Template** builds the columns for a product type. You fill the rows — or fetch them from a live listing — and choose each row's **Operation Type**: `UPDATE`, `PARTIAL_UPDATE`, `PATCH-DELETE` or `DELETE`.
* **Validate (Preview)** has Amazon check the rows before anything goes live. **Create/Replace/Del.** publishes up to 20 rows at once; **Submit Feed** sends up to 25,000. Results land in the **Submission Log** tab.
[Overview](/guides/manage-amazon-listings-in-google-sheets) · 1 [All your SKUs](/guides/see-all-amazon-skus-in-google-sheets) · 2 [Live listings](/guides/fetch-live-listings-in-google-sheets) · 3 [Competitor research](/guides/research-amazon-competitors-in-google-sheets) · 4 [Selling eligibility](/guides/check-asin-selling-eligibility-in-google-sheets) · 5 [Write listings with AI](/guides/write-amazon-listings-with-ai-in-google-sheets) · **6 Bulk create & revise**
This guide follows one example from start to finish. The store is **myStore-US** and the brand is **myBrand**. You create two new listings for earbuds, change a price, take a SKU out of its variation family and delete an old SKU, all from one sheet.
## If you know Seller Central's template, you know this sheet [#if-you-know-seller-centrals-template-you-know-this-sheet]
Each step of the flat-file workflow has a counterpart on the Publish Queue tab:
| In Seller Central's template | On the Publish Queue tab |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| Download the template for a category | **Get Template** builds the columns for the product types in column D |
| Required columns | Gold names on row 6 |
| Definitions and valid values | The row-4 guide above each column; a dropdown where the values are fixed |
| The update / delete column | **Operation Type**, column C: Update → `UPDATE`, PartialUpdate → `PARTIAL_UPDATE`, Delete → `DELETE`. `PATCH-DELETE` has no flat-file twin. |
| Export your listings, edit, re-upload | **Fetch by SKU** fills a row from your live listing |
| Upload, then read the processing report | **Validate (Preview)**, then **Create/Replace/Del.** or **Submit Feed**; read the result in **Submission Log** |
## Why switch [#why-switch]
* **Validate instead of upload, wait, download.** In Seller Central you find out which attributes a new product type requires by uploading the flat file, waiting, and downloading the processing report — then doing it again. **Validate (Preview)** gives the same answer in the Submission Log within moments, row by row, and publishes nothing. For a new listing, fill what you know and validate: Amazon's list of missing attributes tells you what is left.
* **Three flat-file accidents are blocked before anything is sent:** a blank operation (never treated as a full update), a partial update without the ASIN (which can create a new listing), and one SKU on two rows. See [If a row is blocked](#if-a-row-is-blocked).
* **Your live listing, fetched into the row.** No export and re-import: **Fetch by SKU** fills a row with what is on Amazon now.
## Before you start [#before-you-start]
* Connect your Amazon store at [sellersheetai.com](https://sellersheetai.com/home) under **Settings → Stores & Marketplaces**.
* Install the SellerSheet sidebar. See [Install & first sync](/help/sheets/install).
* Open the **SellerSheet Catalog** spreadsheet from the sidebar's **Catalogs** panel (under **Resources**) or from your SellerSheet folder in Drive. Go to the **Publish Queue** tab and expand the **Publish Queue** group in the sidebar. Its buttons work only while that tab is open.
## The tab, row by row [#the-tab-row-by-row]
* **A3 Store** and **B3 Listing Locale** apply to every row. **C3 Template Locale** sets the language of the guides; leave it blank to use B3.
* **D3 Last Result** shows a summary of the last Validate or publish, such as `✓ Validate OK · 2 rows`.
* **Row 6 names:** gold = required, white = optional, slate = filled for you.
* **Columns A–E** are the same on every template: Image (filled for you), **SKU**, **Operation Type**, **Product Type** and Attributes JSON.
## Lesson 1 — Create new listings (UPDATE) [#lesson-1--create-new-listings-update]
You will list two new SKUs, **EB-PRO-BLK** and **EB-PRO-WHT**, under product type **HEADPHONES**.
### Set the store and locale [#set-the-store-and-locale]
Type `myStore-US` in **A3** and pick **en_US** in **B3**.
### Get the template [#get-the-template]
Type the SKUs in **B7:B8**, `UPDATE` in **C7:C8** and `HEADPHONES` in **D7:D8**. Then click **Publish Queue › Get Template**.
The HEADPHONES columns now start at column F, with a guide on row 4 and their names on row 6. Required names are gold.
* **Get the template first, then fill.** A re-run keeps each row's SKU, Operation Type and Product Type (columns B–D) but clears every other cell of the rows below.
* **Several product types?** Put a different one on each row. Get Template merges their columns into one sheet.
* **Not sure of the product type?** Let Amazon fill it in. See [the trick](#let-amazon-fill-in-the-product-type).
### Fill the rows [#fill-the-rows]
Fill every gold column. On HEADPHONES these are Brand Name, Item Name, Item Highlight, Bullet Point, Product Description and Generic Keyword. Scroll right for Item Condition, Fulfillment Channel Code, Country of Origin and Dangerous Goods Regulations. Then add **one** product ID.
* **Row 4 is the manual.** Click a row-4 cell to read what the column means, its format, its limits and its valid values. Each guide title ends with Amazon's attribute key, so when Amazon names a key in an error, Ctrl+F (⌘+F on a Mac) finds the column.
* **Dropdowns** hold Amazon's valid values. Pick one rather than typing your own word.
* **Several values in one cell** (bullet points, for example): put each on its own line with Alt+Enter (⌥+Enter on a Mac).
* **Product ID:** fill **External Product ID Type** and **External Product ID**, or set **Has GTIN exemption?** to Yes for a product without a barcode. Not both.
* **A barcode that starts with 0 keeps it.** Get Template formats the product ID and Merchant Suggested ASIN columns as plain text. On a sheet set up earlier, a typed `012345678905` can still turn into the number 12345678905: select the column, choose **Format › Number › Plain text** and type it again.
Type your new SKU in column B and a similar product's ASIN in **Merchant Suggested ASIN**, then click **Fetch by ASIN**. The row fills with the attributes Amazon shows for that ASIN. Then clear Merchant Suggested ASIN (left in place, it attaches your SKU to that ASIN) and put in your own product ID and copy. Fetch by ASIN rewrites every row that has an ASIN there and an empty Item Name, so keep other rows off the tab while you use it.
### Validate [#validate]
Click **Validate (Preview)**. Amazon checks up to 20 rows, and nothing is published. **D3** gives the summary, for example `⚠ 1 error — see Submission Log`. The **Submission Log** tab lists each problem on its own line:
> Row 7 · EB-PRO-BLK · 'Country of Origin' is required but missing.
Fix the cell it names and validate again until **D3** reads `✓ Validate OK`.
### Publish [#publish]
Click **Create/Replace/Del.** Amazon accepts the rows, and the Submission Log shows a result for each SKU, such as `✓ 2 of 2 accepted`. For more than 20 rows, use **Submit Feed** instead (see [Bulk](#bulk-more-than-20-rows)).
**Validate**, **Create/Replace/Del.** and **Submit Feed** run every row that has a SKU. Delete a finished lesson's rows before you start the next one, or they are sent again.
## Lesson 2 — Change a price, title or images (PARTIAL_UPDATE) [#lesson-2--change-a-price-title-or-images-partial_update]
`PARTIAL_UPDATE` sends only the cells you fill. Everything else on the listing stays as it is. With `UPDATE`, a blank cell would be removed from the listing.
Here you change the price of **EB-LITE-BLU** to 29.99:
1. On a row, fill **SKU** = EB-LITE-BLU, **Operation Type** = `PARTIAL_UPDATE`, **Product Type** = HEADPHONES.
2. Fill the listing's ASIN in **Merchant Suggested ASIN**. A `PARTIAL_UPDATE` row without the ASIN (or the External Product ID) is blocked, because Amazon sometimes creates a new listing from a partial update. Don't know the ASIN? Click **Fetch by SKU**: the row fills from your live listing, with its ASIN or its barcode. The other cells then hold your live values, so sending them again changes nothing.
3. Fill only the cell to change: **Your Price (Sell on Amazon)** = 29.99.
4. **Validate (Preview)**, then **Create/Replace/Del.**
These are the columns sellers change most often:
| To change | Column |
| -------------------------- | -------------------------------------------------------- |
| Title | Item Name |
| Bullets | Bullet Point (one per line) |
| Description | Product Description |
| Search terms | Generic Keyword |
| Price | Your Price (Sell on Amazon), Sale Price (Sell on Amazon) |
| Stock (merchant-fulfilled) | Quantity |
| Images | Main Image URL, Other Image URL |
## Lesson 3 — Take a SKU out of its variation family (PATCH-DELETE) [#lesson-3--take-a-sku-out-of-its-variation-family-patch-delete]
`PATCH-DELETE` deletes only the attributes you list. Here **EB-LITE-RED** leaves the **EB-LITE-PARENT** family, and the parent and the other colours stay as they are:
1. Type the SKU in column B and click **Fetch by SKU**. The row fills with its real values.
2. Set **Operation Type** to `PATCH-DELETE`.
3. Clear every attribute cell **except** Child Relationship Type, Parent SKU, Parentage Level, Variation Theme Name and the theme's own attribute (here **Color** = Red).
4. **Validate (Preview)**, then **Create/Replace/Del.**
Amazon deletes the value that matches. Fetch first and leave the fetched values exactly as they are. Don't retype them.
## Lesson 4 — Delete a SKU (DELETE) [#lesson-4--delete-a-sku-delete]
1. Type **EB-OLD-GRY** in column B and click **Fetch by SKU**. The row now holds the whole listing.
2. Click **Backup**. It saves a copy of the tab in your Drive and records its link on the **Listing Log** tab of this spreadsheet.
3. Set **Operation Type** to `DELETE`. The other cells can stay — a `DELETE` row sends only the SKU.
4. Click **Create/Replace/Del.**
A `DELETE` row needs only **SKU** and **Operation Type**: no product type and no template. To delete many SKUs, paste them into column B, click **Fetch by SKU** and **Backup**, fill `DELETE` down column C, then click **Create/Replace/Del.** (up to 20 rows) or **Submit Feed** (more).
`DELETE` removes the SKU from your catalog. Validate skips `DELETE` rows because Amazon has no preview for them, and the deletion cannot be undone.
## All four in one batch [#all-four-in-one-batch]
A sheet can hold rows of every Operation Type. One click of **Create/Replace/Del.** runs each row by its own type:
## Validate, publish, read the result [#validate-publish-read-the-result]
| Button | Rows | What it does |
| ----------------------- | -------------------------- | ------------------------------------------------------------------------------ |
| **Validate (Preview)** | up to 20 | Amazon checks the rows and nothing goes live. `DELETE` rows are skipped. |
| **Create/Replace/Del.** | up to 20 | Live. Each row runs by its Operation Type; the result for each SKU is instant. |
| **Submit Feed** | up to 25,000 (under 10 MB) | Live. Every row goes in one feed, which Amazon processes in its queue. |
Each run adds one row to the **Submission Log** tab:
* **Action** names the button: **Publish** is **Create/Replace/Del.**
* **Result** is the cell to read: `✓ 4 of 4 accepted`, `⚠ 248 of 250 accepted` or `⏳ Processing`.
* **Issues** gives one line per problem, naming the sheet row or the SKU.
* **Feed ID** and **Feed Status** are filled for Submit Feed only. **Remark ✎** is for your own notes, and **Raw Response** keeps Amazon's full answer.
### Bulk: more than 20 rows [#bulk-more-than-20-rows]
1. Put up to 20 sample rows on the tab, one or two of each product type, and **Validate** them until they pass.
2. Add the rest of the rows and click **Submit Feed**.
3. Open the **Submission Log** tab and click **Submission Log › Refresh Status** until **Feed Status** reads `DONE`. **Result** then shows how many rows Amazon accepted, and **Issues** shows the rest.
* **Fill from JSON:** paste a listing's JSON (for example the JSON cell of a [Listing Snapshot](/guides/fetch-live-listings-in-google-sheets) row) into **Attributes JSON** and click **Fill from JSON**. An empty SKU or Product Type is filled from the JSON too.
* **From Listing Drafts:** copy written with AI arrives with **Send to Publish Queue**. See [Write listings with AI](/guides/write-amazon-listings-with-ai-in-google-sheets).
* **Existing ASINs:** to sell a product that is already on Amazon, use product type `PRODUCT`. See [Bulk add existing ASINs](/guides/bulk-add-existing-asins-to-your-catalog).
* The sidebar's full button list is on [Catalogs](/help/sheets/sellers/catalogs).
## Tricks that save you time [#tricks-that-save-you-time]
### Fetch a whole column of SKUs at once [#fetch-a-whole-column-of-skus-at-once]
Type 50 SKUs in column B and click **Fetch by SKU** once; each row fills from its own listing. Only rows with an empty Item Name are fetched. A run stops after about five minutes, and the sidebar says how many rows are left — click again to continue.
### Let Amazon fill in the product type [#let-amazon-fill-in-the-product-type]
You don't need to know a SKU's product type to get its template:
1. Type the SKUs in column B and `PARTIAL_UPDATE` in column C, then click **Fetch by SKU**. Column D fills with each SKU's product type. Values that have no column yet go into new columns at the far right.
2. Click **Get Template**. It builds the columns of every product type in column D, in Amazon's order, with the required names in gold, and replaces those extra columns.
3. Click **Fetch by SKU** again. Get Template cleared everything except columns B–D, so this second fetch puts the values back, under the template's own columns this time.
4. Change the cells you want, then click **Validate (Preview)**.
You can also copy a SKU's **SKU** (column B) and **Product Type** (column J) from [Listing Snapshot](/guides/fetch-live-listings-in-google-sheets). For a product you don't sell yet, put its ASIN on a Listing Snapshot row and click **Fetch by ASIN**; column J shows its product type.
### Change a listing without a new template [#change-a-listing-without-a-new-template]
A SKU of another product type can use the columns already on the tab, so you skip **Get Template**, which would clear your rows. Item Name, Bullet Point and Your Price are on almost every template. For a `PARTIAL_UPDATE`, **column D** must hold the SKU's own product type, because Amazon checks the row against it. Copy it from Listing Snapshot, or click **Fetch by SKU** on the row.
### Check whether Amazon took your change [#check-whether-amazon-took-your-change]
`accepted` means Amazon accepted your submission. Shoppers see Amazon's product page, and Amazon may show another seller's value there, or its own, instead of yours. To see which value won, fetch the product twice on Listing Snapshot — once by SKU, once by ASIN — and compare. See [Live listings, Lesson 3](/guides/fetch-live-listings-in-google-sheets#lesson-3--check-whether-amazon-took-your-change).
### Read the guides in your own language [#read-the-guides-in-your-own-language]
**B3 Listing Locale** is the language shoppers read. **C3 Template Locale** is the language you read the row-4 guides and the row-6 names in. A US listing can be written in **en_US** while you read the template in **zh_CN**; the row-6 names then show in Chinese, while this guide uses the English names.
### One Publish Queue per marketplace [#one-publish-queue-per-marketplace]
The Publish Queue buttons work on any tab whose name starts with **Publish Queue**. Duplicate the tab and rename the copy **Publish Queue UK**. Set its **A3** to `myStore-UK` and **B3** to **en_GB**, then click **Get Template**. Each tab keeps its own store and template. Listing Drafts' **Send to Publish Queue** always fills the tab named exactly **Publish Queue**.
## If a row is blocked [#if-a-row-is-blocked]
The sidebar checks every row before it sends anything. If one row fails a check, nothing is sent, and the message names the row:
| The message says | Fix |
| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| operationType is empty | Fill column C. A blank is never treated as `UPDATE`, because `UPDATE` replaces the whole listing. |
| SKU "…" is on rows 7, 9 | Keep one row per SKU. |
| … has no productType | Fill column D. Only a `DELETE` row can leave it blank. |
| UPDATE needs a product identifier | Fill External Product ID (type and value) or Merchant Suggested ASIN, or set Has GTIN exemption? to Yes. |
| … are mutually exclusive — fill exactly one | A row has both a product ID and the GTIN exemption. Clear one. |
| PARTIAL_UPDATE requires … | Fill the ASIN in Merchant Suggested ASIN. **Fetch by SKU** fills the ASIN or the barcode. |
| Product type "…" does not exist on this marketplace | Check column D. Product types are in capitals, such as `HEADPHONES`. |
| Country Mismatch | Set **B3** to a language of the store's country, such as **en_GB** for `myStore-UK`. |
| Too many SKUs … Maximum allowed is 20 | Use **Submit Feed** for more than 20 rows. |
| This Publish Queue sheet is an old version | Update the tab as the message says. Your old tab is kept as a backup tab, so you can copy your rows over from it. |
This message comes from Amazon, not from the sidebar: **"'X' is required but missing — but you filled X…"**. The value you typed isn't exactly one of the dropdown options, and capital letters count. Amazon ignores the value and reports it as missing. Pick it again from the dropdown.
## Frequently asked questions [#frequently-asked-questions]
### Is the Publish Queue the same as Seller Central's flat file? [#is-the-publish-queue-the-same-as-seller-centrals-flat-file]
It holds the same columns. The tab's hidden row 5 carries Amazon's own flat-file key for every column, and row 6 the column names you know from the template. What differs is the workflow — the template builds in the sheet, Amazon checks rows before they go live, and the results land in the Submission Log tab instead of a report you download.
### Why was my PARTIAL_UPDATE row blocked? [#why-was-my-partial_update-row-blocked]
A `PARTIAL_UPDATE` row needs the listing's identifier — its ASIN in Merchant Suggested ASIN, or the External Product ID. Amazon sometimes creates a new listing from a partial update; with the identifier filled it never will. Fetch by SKU fills it from your live listing.
### Can I validate more than 20 rows? [#can-i-validate-more-than-20-rows]
No. Validate (Preview) and Create/Replace/Del. take up to 20 SKUs. For a bigger batch, validate up to 20 sample rows first, then put all the rows in and click Submit Feed — up to 25,000 rows, under 10 MB.
### Can I undo a DELETE? [#can-i-undo-a-delete]
No. `DELETE` removes the SKU from your catalog, has no preview and cannot be undone. Fetch the SKU first, then click Backup — it saves a copy of the tab, with the whole listing, and records its link on the Listing Log tab — so you can list the SKU again from the copy.
### Why did Fetch by SKU skip my row? [#why-did-fetch-by-sku-skip-my-row]
Fetch by SKU, Fetch by ASIN and Fill from JSON run only on rows whose Item Name is empty — a filled title means the row is done. Clear the Item Name to fetch the row again; the whole row is then rewritten from the live listing.
### Does Get Template erase what I typed? [#does-get-template-erase-what-i-typed]
It keeps the SKU, Operation Type and Product Type of every row (columns B–D) and clears the other cells of the rows below the header, so run it before you fill the rows. If the rows came from Fetch by SKU or Fetch by ASIN, fetch again afterwards to put the values back.
# How to Bulk Check ASIN Selling Eligibility in Google Sheets (https://sellersheetai.com/guides/check-asin-selling-eligibility-in-google-sheets)
> Check whether you may sell hundreds of ASINs at once in Google Sheets — allowed, approval required or restricted, with Amazon's reason and the approval link — next to each product's Buy Box, rank and offer counts.
* The **Restriction Check** tab answers "can I sell this?" for many ASINs at once, before you spend time on a listing.
* Type the store and ASIN, pick a **Reason Locale**, then click **Fetch ASIN Info** (image, brand, rank, Buy Box, offers) and **Get Restrictions**.
* **Status** reads `ALLOWED`, `APPROVAL_REQUIRED` (open the **Approval Link** to apply) or `RESTRICTED`, with Amazon's reason next to it. A check that failed reads `ERROR`, with the error.
[Overview](/guides/manage-amazon-listings-in-google-sheets) · 1 [All your SKUs](/guides/see-all-amazon-skus-in-google-sheets) · 2 [Live listings](/guides/fetch-live-listings-in-google-sheets) · 3 [Competitor research](/guides/research-amazon-competitors-in-google-sheets) · **4 Selling eligibility** · 5 [Write listings with AI](/guides/write-amazon-listings-with-ai-in-google-sheets) · 6 [Bulk create & revise](/guides/bulk-create-revise-amazon-listings-in-google-sheets)
In Seller Central you search each ASIN under **Catalog › Add Products** to see whether you may sell it. Here each row also shows the Buy Box price and how many FBA and FBM sellers compete, so you can decide on a product at a glance. In this guide **myStore-US** checks a short list of earbuds it found in [competitor research](/guides/research-amazon-competitors-in-google-sheets) — and the same product on **myStore-UK** — in two clicks.
## Before you start [#before-you-start]
* Connect your store at [sellersheetai.com](https://sellersheetai.com/home) and install the sidebar ([Install & first sync](/help/sheets/install)).
* In the sidebar's **Catalogs** panel, click **Catalog** under **Resources** to open the **SellerSheet Catalog** spreadsheet. Go to the **Restriction Check** tab and expand the **Restriction Check** group in the sidebar.
## Check a list of ASINs [#check-a-list-of-asins]
### Fill the rows [#fill-the-rows]
From row 4, fill three columns per row:
* **Store ✎:** the store and marketplace, such as `myStore-US`. Type it — there is no dropdown — with the country code in capitals.
* **ASIN ✎:** the ASIN, in capitals and without spaces.
* **Reason Locale ✎:** pick the language Amazon should write its reasons in, such as en_US. Without one, the row gets `ERROR`.
Coming from [Catalog Research](/guides/research-amazon-competitors-in-google-sheets)? Select the rows there and click **Send to Restriction Check**: their store and ASIN are added here, with the Reason Locale set to the marketplace's language (en_US for myStore-US). Change it if you want Amazon's reasons in another language.
### Click Fetch ASIN Info [#click-fetch-asin-info]
Click **Fetch ASIN Info**. Each row fills with the product's **Image** and **Brand**, its **Rank** (it can be blank), the **Buy Box** price and the number of **FBA Offers** and **MFC Offers** (merchant-fulfilled, FBM), all for a new item.
The sidebar says how many rows it filled. A row left without an image got nothing back from Amazon: check the ASIN and the store's marketplace.
### Click Get Restrictions [#click-get-restrictions]
Click **Get Restrictions**. Each row gets a **Status**, the **Reasons**, an **Approval Link** where Amazon offers one, and the time in **Checked At**. A long list stops after about five minutes, and the sidebar says so; click **Get Restrictions** again to check the rest.
## What the Status means [#what-the-status-means]
| Status | What to do |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ALLOWED` | You can list it as new. Go on to [Listing Drafts](/guides/write-amazon-listings-with-ai-in-google-sheets) or the [Publish Queue](/guides/bulk-create-revise-amazon-listings-in-google-sheets). |
| `APPROVAL_REQUIRED` | Open the **Approval Link** and apply in Seller Central. Check again once you're approved. |
| `RESTRICTED` | You can't list it. **Reasons** says why. Pick another product. |
| `ERROR` | The check failed. **Reasons** gives the error — often a mistyped ASIN or a missing Reason Locale. Fix it, clear Status and check again. |
## Tricks [#tricks]
* **Check again:** clear the **Status** cell and click **Get Restrictions**. Rows with a Status are skipped, so a second click only checks new rows — and continues where a long run stopped.
* **Fresh prices:** **Fetch ASIN Info** refreshes the Buy Box, rank and offers on every click. The image and brand are fetched only while **Image** is empty; clear it to fetch them again.
* **Several marketplaces:** each row has its own store, so put the same ASIN on a `myStore-US` row and a `myStore-UK` row to see where you may sell it.
* **Track your approvals:** sort by **Status** to group the `APPROVAL_REQUIRED` rows, apply through their links, then clear their Status and check them again later.
## Frequently asked questions [#frequently-asked-questions]
### What do the Status values mean? [#what-do-the-status-values-mean]
`ALLOWED` means you can list the ASIN as new. `APPROVAL_REQUIRED` means Amazon needs to approve you first — open the Approval Link to apply. `RESTRICTED` means you cannot list it, and Reasons says why. `ERROR` means the check failed for that row, and Reasons gives the error.
### How do I check a row again? [#how-do-i-check-a-row-again]
Clear its Status cell and click Get Restrictions. Rows that already have a Status are skipped, so a second click only checks the new rows.
### Why does a row say ERROR with "missing reasonLocale"? [#why-does-a-row-say-error-with-missing-reasonlocale]
The row has no Reason Locale. Pick one from the dropdown, clear the ERROR in Status, and click Get Restrictions again.
### Which condition does the check use? [#which-condition-does-the-check-use]
New. Both the restriction check and the Buy Box and offer counts are for a new item.
### Does it use credits? [#does-it-use-credits]
No. These buttons don't use Credits. On the Free plan, each check counts toward your monthly sidebar operations.
# How to Connect noon to SellerSheet (https://sellersheetai.com/guides/connect-noon-to-sellersheet)
> Create a noon service-account key in the noon Access App and connect your noon store to SellerSheet, so you can run noon reports, stock, pricing and FBN inbound from Google Sheets or your AI agent.
* In the noon Access App, create a service account (**Platform** namespace → **Project Admin** role) and download its `.json` key.
* In the SellerSheet app, open **Settings → Stores & Marketplaces**, click **Add noon account**, name the account, pick your marketplaces, paste the values from the `.json` key, and click **Connect account**.
* Then run noon reports from the SellerSheet sidebar in Google Sheets.
## Introduction [#introduction]
SellerSheet connects to your **noon Partner** account so you can run your noon operations straight from Google Sheets — the same way you run Amazon today, on both the **sidebar** (you) and **MCP** (your AI agent) paths, with your sheet as the surface. Once connected you can work with:
* **Reports** — orders, finance, FBN inventory aging, and product-views & sales (on demand or scheduled).
* **Stock & Pricing** — read and push stock levels and price changes.
* **Offers, Catalog & Warehouses** — offer data, SKU↔barcode mapping, warehouse list.
* **FBN inbound & Cross-border pricing** — manage inbound shipments end to end and set transfer prices.
noon authenticates with a **service-account key** (a small `.json` file you download once from noon), not a username and password. This guide has two parts: first you create and download your key from the **noon Access App**, then you add your noon account in the **SellerSheet app**.
## Prerequisites [#prerequisites]
* **noon Partner account** with access to the noon Seller portal / Access App.
* **SellerSheet account** ([sign in](https://sellersheetai.com/home)) with the add-on installed in Google Sheets — see [Install & first sync](/help/sheets/install).
## Part 1 — Get your noon service-account key [#part-1--get-your-noon-service-account-key]
You create the key once in noon's **Access App**. noon downloads a `.json` file to your computer at the end — the values in that file are what you give SellerSheet.
### 1. Open the Access App [#1-open-the-access-app]
Go to the [noon Access App](https://access.noon.partners/en/), or open **User & Access → User access** in the noon Seller portal.
\[\[TODO: screenshot noon Seller portal — User & Access section / Access App (retake — the old one showed real store data)]]
### 2. Go to API Users [#2-go-to-api-users]
In the left sidebar, click **API Users** to see your service accounts.
\[\[TODO: screenshot API Users option in the Access App left sidebar (retake — the old one showed real store data)]]
### 3. Add a service account [#3-add-a-service-account]
Click **Add Service Account** to create a new API identity for SellerSheet.
\[\[TODO: screenshot Add Service Account button (retake — the old one showed real store data)]]
### 4. Fill in the details [#4-fill-in-the-details]
Enter a **Display Name** and **Username** (for example "SellerSheet"). You can optionally set an IP whitelist and a key-expiry date; leave them blank for a key that works from any IP and never expires.
\[\[TODO: screenshot Service account form: Display Name, Username, IP whitelist, key expiry (retake — the old one showed real store data)]]
### 5. Choose the role — Platform → Project Admin — then click Add [#5-choose-the-role--platform--project-admin--then-click-add]
In the role picker, pick the **Platform** namespace on the left, then select **Project Admin** on the right and click **Select Role**. Project Admin gives SellerSheet the access it needs to read your reports, orders, and catalog (and manage your stores) without handing over full owner control — choose **Project Owner** instead only if you want the key to have everything. Add more roles if you like, then click **Add**. A `.json` key file downloads automatically — it contains your "key_id", "private_key", "project_code", and "channel_identifier".
The "private_key" inside the `.json` is your secret — treat it like a password. noon allows up to **5 keys per service account**; you can deactivate a key in the Access App at any time if you suspect misuse. The session a key creates lasts 30 days, and SellerSheet refreshes it for you automatically.
## Part 2 — Add your noon account on SellerSheet [#part-2--add-your-noon-account-on-sellersheet]
### 1. Open Stores & Marketplaces and click Add noon account [#1-open-stores--marketplaces-and-click-add-noon-account]
Sign in to the [SellerSheet app](https://sellersheetai.com/home), open **Settings → Stores & Marketplaces**, and in the **noon accounts** section click **Add noon account**.
\[\[TODO: screenshot Settings → Stores & Marketplaces, noon accounts section with Add noon account]]
### 2. Name the account and pick marketplaces [#2-name-the-account-and-pick-marketplaces]
In the dialog:
* Enter an **account name** — this is how you'll refer to the store everywhere in SellerSheet, so keep it short and memorable (e.g. `myStore`). Use 1–10 letters, digits or `_` — no spaces or hyphens: the hyphen is reserved to attach the marketplace. You then reference a specific marketplace as `-` (e.g. `myStore-AE`, `myStore-SA`), the same identifier in both places:
* **In your sheet** — the value you put in the noon Reports **Store** column (the same convention as your Amazon stores).
* **With AI / MCP** — the `store` argument every noon tool takes (e.g. "run the noon orders report for `myStore-AE`").
* Pick the **marketplaces** your account covers (e.g. UAE, Saudi). Every noon marketplace counts against your plan's marketplaces, the same as Amazon ones.
### 3. Paste the key and click Connect account [#3-paste-the-key-and-click-connect-account]
Choose **Use an API key** and copy the values from the `.json` file you downloaded in Part 1 into the fields: **Key ID** ("key_id"), **Private key** ("private_key" — the whole key, BEGIN and END lines included), **Project code** ("project_code") and, if your file has one, **Channel identifier** ("channel_identifier"). Click **Connect account**.
If the dialog offers **Connect with noon**, you can instead sign in on noon and let it grant access — no key to copy.
SellerSheet validates the key against noon and stores it **encrypted** (it is never shown again). Your account appears in the noon accounts table as **Connected**, with its project code and **Recheck**, **Marketplaces**, **Reconnect** and **Disconnect** actions.
\[\[TODO: screenshot the noon account connected in Settings → Stores & Marketplaces]]
A noon project can be connected to **one SellerSheet account**. If a project is already linked, disconnect it there first before reconnecting.
## What you can do with noon in SellerSheet [#what-you-can-do-with-noon-in-sellersheet]
Once connected, open the **SellerSheet sidebar** in Google Sheets and switch to the **noon** tab. Every operation works on both paths — the **sidebar** for hands-on work and the **MCP tools** so your AI agent can run them for you:
* **Reports** — orders, finance, FBN inventory aging, and product-views & sales reports, downloaded to Drive and into your sheet (and available on a schedule). See [noon Reports](/help/sheets/noon/reports).
* **Stock** — read current stock and push stock updates.
* **Pricing** — read prices and upsert price changes.
* **Offers** — pull your offer data.
* **Catalog** — map your SKUs to noon barcodes. See [noon Listings](/help/sheets/noon/listings).
* **FBN inbound** — create and manage inbound shipments end to end: eligible items, shipment create/update, items, delivery slots, scheduling, and status. See [noon FBN](/help/sheets/noon/fbn).
* **Cross-border pricing** — read and upsert transfer prices and cross-border product setup.
* **Warehouses** — list your noon warehouses.
A good first run: create the **noon Reports** tab, choose a report and date range, click **Create Reports**, then **Get Reports** — SellerSheet downloads it, exactly like Amazon Store Reports.
## FAQ [#faq]
### What do I need to connect noon to SellerSheet? [#what-do-i-need-to-connect-noon-to-sellersheet]
A noon Partner account with access to the noon Access App, where you create a service account and download its `.json` key. No password sharing is involved.
### Where do I get my noon service-account key? [#where-do-i-get-my-noon-service-account-key]
In the noon Access App, open **API Users**, click **Add Service Account**, choose the **Platform** namespace with the **Project Admin** role, and click **Add**. A `.json` key file downloads automatically.
### Is my noon private key safe with SellerSheet? [#is-my-noon-private-key-safe-with-sellersheet]
Yes. SellerSheet validates the key and stores the private key **encrypted**. Never share the `.json` file itself — it is your secret key.
### Which noon role does the service account need? [#which-noon-role-does-the-service-account-need]
The **Platform** namespace with the **Project Admin** role. Without it, noon reports return a missing-role error.
### Can I run noon reports in Google Sheets after connecting? [#can-i-run-noon-reports-in-google-sheets-after-connecting]
Yes. Open the SellerSheet sidebar in Google Sheets, go to the **noon** tab, create the **noon Reports** tab, and run your reports.
# How to Connect SellerSheet MCP (https://sellersheetai.com/guides/connect-sellersheet-mcp)
> Connect the SellerSheet MCP server to Claude Code, Claude Desktop, Cursor, Windsurf, Coze and Codex, and manage your Amazon business directly from your own AI agent.
SellerSheet provides an MCP server that gives the AI client you already use — Claude, ChatGPT/Codex, Cursor and others — more than tools for your Amazon and noon stores. This guide connects it to Claude Code, Claude Desktop, Cursor, Windsurf, Coze and Codex.
## How authentication works [#how-authentication-works]
The SellerSheet MCP server is a standard OAuth 2.0 remote MCP endpoint at `https://sellersheetai.com/mcp`. You do **not** need to copy an API key or configure any tokens manually for most clients. Here is what happens the first time you connect:
1. **Your client sends a request to `/mcp`.** The server responds with `401 Unauthorized` and a pointer to the OAuth discovery endpoint.
2. **The client discovers the authorization server.** It fetches `/.well-known/oauth-authorization-server` to learn the login and token endpoints.
3. **A browser tab opens automatically.** Your client opens the SellerSheet sign-in page in your default browser. You sign in to SellerSheet — with Google, or with a code sent by email — not to Amazon.
4. **You see an "Authorize Connection" page.** After signing in, SellerSheet shows a confirmation page with your account and the client name. Click **Authorize**.
5. **The client receives and stores the Bearer token.** The client exchanges the authorization code for a Bearer token and saves it locally. All future requests use this token silently — you do not sign in again unless the connection is revoked.
For Claude Code, Claude Desktop, Cursor and Windsurf, just paste the URL and click **Authorize** in the browser. The token is handled automatically.
SellerSheet already holds your Amazon SP-API authorization from when you connected your store. The MCP sign-in only identifies *you* as a SellerSheet user.
You need an active SellerSheet account with at least one Amazon store connected. Sign in at [sellersheetai.com](https://sellersheetai.com/home) and connect a store under **Settings → Stores & Marketplaces** first if you haven't already.
## Claude Code [#claude-code]
Run this one command in your terminal, then start Claude Code and run `/mcp` to sign in — your browser opens the SellerSheet sign-in and Claude Code stores the token.
```bash
claude mcp add --transport http sellersheet https://sellersheetai.com/mcp
```
Alternatively, add it to your project's `.mcp.json`:
```json
{
"mcpServers": {
"sellersheet": {
"type": "http",
"url": "https://sellersheetai.com/mcp"
}
}
}
```
## Claude Desktop [#claude-desktop]
1. Open **Settings → Connectors → Add custom connector**.
2. Name it `SellerSheet` and paste `https://sellersheetai.com/mcp` as the server URL.
3. Click **Connect** — your browser opens the SellerSheet sign-in; approve, and you're back in Claude.
The same steps work on claude.ai in the browser (custom connectors need a paid Claude plan).
## Cursor [#cursor]
Go to **Cursor Settings → MCP → Add new global MCP server** and paste the config below, or add it directly to `~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"sellersheet": {
"url": "https://sellersheetai.com/mcp"
}
}
}
```
There is no API key or token field in the config — Cursor handles OAuth automatically. When you first use a SellerSheet tool in a Cursor chat, Cursor detects the `401` from the server, reads the OAuth metadata, and opens your browser for the authorization flow described above. After you click **Authorize**, Cursor stores the Bearer token and reuses it for all future sessions.
If Cursor does not open the browser automatically, check **Settings → MCP** and click the refresh icon next to the sellersheet entry to trigger the authorization flow.
## Windsurf [#windsurf]
Edit `~/.codeium/windsurf/mcp_config.json` (or open **Windsurf Settings → MCP Servers → Add Server**):
```json
{
"mcpServers": {
"sellersheet": {
"serverUrl": "https://sellersheetai.com/mcp"
}
}
}
```
Same OAuth flow as Cursor — no token to copy. A browser tab opens the first time Windsurf calls a SellerSheet tool.
## Coze [#coze]
Coze does not run a browser OAuth flow — it calls MCP endpoints directly from its servers. You need to provide your SellerSheet API key as a Bearer token in the request header.
Create an API key in the SellerSheet app under **Settings → API & MCP**. Then in Coze:
1. Open your Coze Bot → **Skills → MCP Tool → Add MCP Tool**.
2. Select **Connect via URL**.
3. Enter `https://sellersheetai.com/mcp`.
4. Add a custom header: `Authorization: Bearer `.
5. Save and publish.
```json
{
"name": "SellerSheet MCP",
"url": "https://sellersheetai.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY_HERE"
}
}
```
## Codex (OpenAI) [#codex-openai]
The OpenAI Codex CLI supports remote MCP servers through its configuration file. Add the following to `~/.codex/config.toml`:
```toml
[mcp_servers.sellersheet]
url = "https://sellersheetai.com/mcp"
```
Codex follows the same OAuth 2.0 flow — a browser tab opens on the first SellerSheet tool call and you sign in to SellerSheet and authorize. No API key is required.
You can also add it from the terminal without editing the file: `codex mcp add sellersheet --url https://sellersheetai.com/mcp`.
## Your first tool call [#your-first-tool-call]
Once connected, start every session with `get_user_context`. It returns your stores (with the ready-made store refs such as `myStore-US` that every store tool takes), your plan and your workspace config — the context every other tool depends on.
```text
Call get_user_context to load my SellerSheet workspace,
then show me all active FBA shipments.
```
## Troubleshooting [#troubleshooting]
### "No Amazon stores connected" [#no-amazon-stores-connected]
You need to connect an Amazon Seller Central account first. Sign in at [sellersheetai.com](https://sellersheetai.com/home) and go to **Settings → Stores & Marketplaces**. The MCP server uses the authorization you grant there — no separate Amazon login is needed in your AI tool.
### "Workspace not initialized" [#workspace-not-initialized]
Open Google Sheets → **Extensions → SellerSheet → Open Sidebar** and complete the workspace setup. This creates the Drive folder structure the MCP server writes reports into. See [Install & first sync](/help/sheets/install).
### 401 Unauthorized after authorizing [#401-unauthorized-after-authorizing]
This usually means the key or connection was revoked under **Settings → API & MCP** after the client was authorized. Remove the MCP server from your client, re-add the URL, and go through the authorization again.
### Browser tab doesn't open in Cursor / Windsurf [#browser-tab-doesnt-open-in-cursor--windsurf]
Make sure your client version supports MCP OAuth 2.0. In Cursor, go to **Settings → MCP** and click the refresh/reconnect icon next to the sellersheet entry to trigger the flow manually. In Windsurf, restart the IDE after saving the config — it starts the authorization on the first tool call.
For every tool and the Tool API, see [MCP & API](/docs/mcp-api).
# How to Create Amazon A+ Content in Google Sheets (https://sellersheetai.com/guides/create-amazon-a-plus-content-in-google-sheets)
> Build, submit and manage Amazon A+ Content from Google Sheets — define modules in a sheet, load images from Drive, publish, and assign ASINs in bulk.
Amazon A+ Content (formerly Enhanced Brand Content / EBC) lets brand-registered sellers add rich media — images, comparison charts and formatted text — to their product detail pages. Well-designed A+ Content can increase conversion rates by 3–10%.
The problem? Seller Central's A+ editor is slow and tedious, especially when you create or update content across dozens of ASINs. There's no way to bulk-create modules or reuse templates efficiently.
SellerSheet handles the whole A+ Content workflow from Google Sheets. Define your content modules in a spreadsheet, load images from Google Drive, submit to Amazon and manage ASIN assignments — all from the sidebar. This guide covers the three sheets of the SellerSheet A+ spreadsheet — **Create A+**, **List A+** and **Manage A+ ASINs** — in four steps:
1. **Create A+** — define modules and content.
2. **Submit** — load images and publish.
3. **Manage ASINs** — assign and revise ASINs.
4. **List A+** — review and track status.
## Prerequisites [#prerequisites]
* **Store connected:** your Amazon store is connected under **Settings → Stores & Marketplaces** in the [SellerSheet app](https://sellersheetai.com/home).
* **Sidebar installed:** the SellerSheet add-on is installed in Google Sheets. If not, follow [Install & first sync](/help/sheets/install).
* **Brand Registry:** your Amazon Seller Central account must be enrolled in [Amazon Brand Registry](https://brandservices.amazon.com/) to access A+ Content.
* **Product images:** prepare your A+ images in a Google Drive folder. Images must meet Amazon's requirements (minimum 970 px wide for most modules).
## The Create A+ sheet [#the-create-a-sheet]
In Seller Central, building A+ Content means dragging and dropping modules one at a time, uploading images individually and typing text into tiny input boxes. There's no way to create templates, duplicate content across ASINs or bulk-edit modules.
The **Create A+** sheet is where you define your A+ Content. It has two parts: a **config row** (row 4, labelled in row 3) for the document settings, and a **modules area** (row 6 down) where you define each content module.
\[\[TODO: screenshot Create A+ sheet showing content module configuration with the sidebar (retake — the old one showed real store data)]]
### Config settings (row 4) [#config-settings-row-4]
The config row holds the settings of the whole A+ document:
* **Store:** your store ref (e.g. `myStore-AE`).
* **Locale:** the language/marketplace locale (e.g. **en_AE**).
* **A+ Name:** a descriptive name for this A+ content (e.g. "My Brand Story").
* **Content Type:** `EBC` for standard A+ Content.
* **Image Folder:** the subfolder of your SellerSheet images folder in Google Drive where this content's images are stored (e.g. `SKU-001`). Optional.
* **Content Document:** the document as JSON — filled when you load an existing document.
* **ASINs:** the ASINs to apply this A+ content to.
* **Content Reference Key:** Amazon's unique identifier for this A+ content — auto-filled after submission, or typed in to load an existing document.
* **ASIN Submit Result / Aplus Submit Result:** the status of the ASIN association and of the A+ content submission, auto-filled.
### Content modules (row 6 down) [#content-modules-row-6-down]
Each row from row 6 down defines one A+ content module. Pick the module type in the first column, then click **Load Hints**: the **Example** column shows Amazon's sample of that module, and the row's cells are coloured green (required), yellow (optional) or gray (unused). The columns map directly to Amazon's A+ Content API:
* **Content Module Type:** the Amazon module type (e.g. `STANDARD_COMPANY_LOGO`, `STANDARD_IMAGE_TEXT_OVERLAY`, `STANDARD_FOUR_IMAGE_TEXT`).
* **Headline / Sub Headline / Body Text / Bullet Points:** the module's text.
* **Image 1–4** with their **Alt**, **Caption**, **Headline** and **Body** columns: the module's images — the image file name, loaded from Google Drive with **Load Images (Drive)** — and their text. Alt text is required for accessibility.
* **Overlay Color / Image Position:** layout options for the modules that take them.
Each module type has its own image dimension requirements. Check [Amazon's A+ Content guidelines](https://advertising.amazon.com/library/guides/a-plus-content) for the supported module types and their image specifications.
## Submitting A+ Content [#submitting-a-content]
Once your modules are defined, use the sidebar buttons in the **Create A+** dropdown to load images and submit.
### 1. Load Images (Drive) [#1-load-images-drive]
Click **Load Images (Drive)** in the sidebar. SellerSheet reads the **Image Folder** value from the config row, finds that folder in your Google Drive and fills in the image URLs of every image named in the module rows.
Create a folder in Google Drive for each A+ content set, named after the SKU or product line, and put all module images inside. The image cells only need the file name (e.g. `hero-banner.jpg`) — SellerSheet finds it in the specified folder.
### 2. Create & Submit [#2-create--submit]
Click **Create & Submit** in the sidebar. SellerSheet:
1. Reads all content modules from the sheet (or the Content Document JSON, if present).
2. Creates a new A+ Content document through the Amazon SP-API — Amazon-hosted images are reused directly, Drive and other image URLs are uploaded.
3. Applies the ASINs from the config row and submits the content for approval.
4. Fills in the **Content Reference Key**, **ASIN Submit Result** and **Aplus Submit Result**.
To change a document you already published, put its key in **Content Reference Key** and click **Load A+**: its modules land in the rows, its JSON in **Content Document** and its ASINs in **ASINs**. Edit it, then click **Update A+** to replace the existing document and resubmit it for approval — or change the name or store and click **Create & Submit** to publish a copy.
## The List A+ sheet [#the-list-a-sheet]
The **List A+** sheet gives you an overview of all your existing A+ Content for a store. Set the store in the config row, then click **List A+** in the sidebar; details fill 25 rows per click.
\[\[TODO: screenshot List A+ sheet showing A+ content with status and content reference keys (retake — the old one showed real store data)]]
### List A+ columns [#list-a-columns]
* **A+ Name:** the name you gave when creating the content.
* **Status:** current approval status (e.g. `APPROVED`, `DRAFT`, `REJECTED`).
* **Update Time:** last modification timestamp.
* **Badge Set:** any badges associated with the content.
* **Marketplace ID:** the Amazon marketplace identifier.
* **Content Reference Key:** Amazon's unique identifier — use it to manage the ASINs of this content.
* **Content Document:** the full content document data.
* **ASINs:** ASINs currently associated with this A+ content.
Click a result row and then **Load A+** in the List A+ dropdown: that document loads into the Create A+ sheet as an editable copy. Or copy its **Content Reference Key** into the **Manage A+ ASINs** sheet to change its ASINs.
## Managing A+ ASINs [#managing-a-asins]
In Seller Central, associating A+ Content with ASINs means opening each content, searching for ASINs one by one and applying them individually. Applying the same A+ content to 50+ ASINs takes forever.
The **Manage A+ ASINs** sheet lets you change the ASIN associations of your A+ content in bulk. Fill in the store, content reference key and ASINs, then submit with one click.
\[\[TODO: screenshot Manage A+ ASINs sheet showing ASIN assignments for A+ content (retake — the old one showed real store data)]]
### Manage A+ ASINs columns [#manage-a-asins-columns]
* **Store:** your store ref (e.g. `myStore-AE`).
* **Content Reference Key:** the A+ content identifier, from List A+ or the Create A+ results.
* **ASINs:** one or more ASINs, each on a new line within the cell (e.g. `B0XXXXXXXX`).
* **Submit Result:** filled in with the submission status after you click **Revise A+ ASINs**.
### Revise A+ ASINs [#revise-a-asins]
Click **Revise A+ ASINs** in the **Manage A+ ASINs** dropdown. It **replaces** the ASIN set of each existing A+ document with the ASINs in its row and resubmits it for approval — so list every ASIN the content should keep, not only the new ones.
To assign several ASINs, enter each ASIN on a separate line within the same cell (use `Alt+Enter` or `Ctrl+Enter` in Google Sheets to add a new line within a cell).
## Complete workflow [#complete-workflow]
The end-to-end process for creating and publishing A+ Content:
1. **Prepare images** — create a folder in Google Drive with your A+ module images.
2. **Fill the Create A+ sheet** — set your store, locale, A+ name, content type, image folder and ASINs in the config row. Add content modules row by row and click **Load Hints**.
3. **Load Images (Drive)** — fill the image URLs from Drive.
4. **Create & Submit** — submit the A+ content to Amazon for approval.
5. **Check status** — use **List A+** to verify your content status (`APPROVED`, `DRAFT` or `REJECTED`).
6. **Change ASINs** — fill the **Manage A+ ASINs** sheet with the content reference key and the ASINs, then click **Revise A+ ASINs**.
## Quick reference [#quick-reference]
| What you need | Action | Sheet |
| ------------------------------- | ------------------------------------------------- | --------------- |
| Define A+ content modules | Fill the config row + module rows, **Load Hints** | Create A+ |
| Upload images from Drive | **Load Images (Drive)** | Create A+ |
| Submit A+ content to Amazon | **Create & Submit** | Create A+ |
| Edit a published document | **Load A+**, then **Update A+** | Create A+ |
| View all existing A+ content | **List A+** | List A+ |
| Replace the ASINs of A+ content | **Revise A+ ASINs** | Manage A+ ASINs |
## Maximizing efficiency [#maximizing-efficiency]
* **Reuse templates:** duplicate a Create A+ sheet tab, or load an existing document with **Load A+**, to create variations for different product lines. Change the A+ name, images and text while keeping the same module structure.
* **Bulk ASIN assignment:** apply one A+ content to dozens of ASINs at once — list all ASINs in the cell with line breaks.
* **Google Drive integration:** organize your A+ images by product or SKU in Google Drive folders. **Load Images (Drive)** pulls directly from these folders.
* **Track with List A+:** regularly use List A+ to check content approval status across all your stores. Rejected content can be revised and resubmitted.
* **Combine with listings:** after publishing A+ Content, manage your product listings (titles, prices, descriptions) with [How to Bulk Create & Revise Amazon Listings](/guides/bulk-create-revise-amazon-listings-in-google-sheets). Every button of the panel is listed on [A+](/help/sheets/sellers/a-plus).
# How to Create Amazon Image URLs for Flat Files (https://sellersheetai.com/guides/create-amazon-image-urls-for-flat-files)
> Create and manage the image URLs your Amazon flat files and bulk listing uploads need, with SellerSheet's Dropbox integration.
Streamline your image management with Dropbox integration.
## Introduction [#introduction]
Managing product images for Amazon listings can be challenging, especially when dealing with bulk uploads. This guide shows you how to efficiently create and manage image URLs for your Amazon flat files using Dropbox integration.
## Prerequisites [#prerequisites]
* Amazon Seller Central account
* Dropbox account
* Product images
* Basic understanding of image optimization
## Step-by-step process [#step-by-step-process]
1. Set up your Dropbox account
2. Organize your product images
3. Generate image URLs
4. Format URLs for flat files
5. Test and validate URLs
## Best practices [#best-practices]
* Optimize images for web
* Use consistent naming conventions
* Maintain image backups
* Verify URL accessibility
## Conclusion [#conclusion]
By following this guide, you can efficiently manage your product images and create valid URLs for your Amazon flat files, ensuring smooth bulk uploads and updates. The sidebar's Dropbox buttons are listed on [Dropbox](/help/sheets/sellers/dropbox); to use the URLs in a listing, see [How to Bulk Create & Revise Amazon Listings](/guides/bulk-create-revise-amazon-listings-in-google-sheets).
# How to Create FBA Shipments (Send to Amazon) in Google Sheets (https://sellersheetai.com/guides/create-sta-shipments-in-google-sheets)
> Run Amazon's whole Send-to-Amazon (STA) workflow from Google Sheets with the SellerSheet sidebar — set up your warehouse and products once, then create, confirm, label and track every FBA shipment in a few clicks.
## Introduction [#introduction]
Creating FBA shipments in Seller Central means navigating multiple pages for every single shipment — entering your warehouse address, adding products one by one, filling box dimensions, choosing carriers, and downloading labels. It's repetitive, error-prone, and slow.
SellerSheet handles the entire **Send-to-Amazon (STA)** workflow from Google Sheets. Set up your warehouse address once, fill in your products and box configurations, then click through the sidebar buttons to initiate, confirm, and track your shipment — including FBA carton labels and FNSKU barcode labels.
This guide covers the **Box First, Split Later** workflow using 4 sheets: **Shipment Setting**, **Product Info**, **Manage Shipments**, and the **STA** working sheet. In four stages:
1. **Set up sheets** — address, products, tracking.
2. **Fill the STA sheet** — boxes, MSKUs, quantities.
3. **Create & confirm** — initiate, options, confirm.
4. **Get labels** — FBA + FNSKU labels.
## Prerequisites [#prerequisites]
* **Store connected:** your Amazon store is connected to your SellerSheet account — sign in at [sellersheetai.com](https://sellersheetai.com/home) and connect it under **Settings → Stores & Marketplaces**.
* **Sidebar installed:** the SellerSheet add-on is installed in Google Sheets. See [Install & first sync](/help/sheets/install).
* **FBA access:** your Amazon Seller Central account must have FBA (Fulfillment by Amazon) enabled.
## Setting up your sheets [#setting-up-your-sheets]
In Seller Central, you re-enter your warehouse address, product details, and box dimensions every time you create a shipment. There's no way to save templates or reuse configurations across plans.
SellerSheet uses an **FBA spreadsheet** with dedicated tabs so you configure your data once and reuse it for every shipment. The FBA spreadsheet contains 4 key tabs.
### 1. Shipment Setting [#1-shipment-setting]
Fill in your warehouse or ship-from address. Each row represents a different warehouse/location identified by a unique **Warehouse Code**. You only need to fill this once per warehouse.
\[\[TODO: screenshot Shipment Setting sheet showing warehouse address configuration (retake — the old one showed real store data)]]
| Column | What it holds |
| ----------------------------------------------------- | ----------------------------------------------------- |
| warehouseCode | Unique ID for this warehouse (e.g. `myStore-US-WH1`). |
| companyName | Company name on the shipping label. |
| name / phoneNumber / email | Contact information for the ship-from address. |
| addressLine1 / addressLine2 | Street address. |
| city / stateOrProvinceCode / countryCode / postalCode | Location details. |
| unitOfDimention | Measurement unit for box dimensions (`CM` or `IN`). |
| unitOfWeight | Weight unit (`KG` or `LB`). |
### 2. Product Info [#2-product-info]
Fill in your product catalog with SKU, FNSKU, ASIN, box dimensions, and prep details. When you create an STA sheet, product data is pulled in automatically via VLOOKUP — so you only fill this once per product.
\[\[TODO: screenshot Product Info sheet showing SKU, FNSKU, ASIN, and box details (retake — the old one showed real store data)]]
| Column | What it holds |
| ------------------------ | ---------------------------------------------------------------------------------------------- |
| store | Store ref (e.g. `myStore-US`). |
| msku | Your Merchant SKU. |
| fnsku | Amazon's Fulfillment Network SKU. |
| asin | Amazon Standard Identification Number. |
| qtyPerBox | Number of units per box. |
| boxDimensions | Length x Width x Height (e.g. `50x42.5x35`) in the units from Shipment Setting. |
| boxWeight | Weight per box in the units from Shipment Setting. |
| labelOwner | Who labels items (`SELLER` or `AMAZON`). |
| prepOwner | Who preps items (`SELLER` or `AMAZON`). |
| prepCategory / prepTypes | Prep requirements (e.g. `NONE`, `ITEM_NO_PREP, ITEM_LABELING` — comma-separated for multiple). |
Use **Store Reports** to create an **FBA Inventory Report** — it gives you SKU, FNSKU, ASIN, and product title automatically. See the [Store Reports guide](/guides/create-store-reports-in-google-sheets) for details.
### 3. Manage Shipments [#3-manage-shipments]
This is your **central tracking hub** for all FBA shipments. Each row represents one shipment plan. You fill in the basic details here, then click **Create STA SS** to generate the working spreadsheet.
\[\[TODO: screenshot Manage Shipments sheet showing shipment tracking with sidebar (retake — the old one showed real store data)]]
| Column | What it holds |
| ---------------------------------- | ------------------------------------------------------------- |
| store / warehouseCode | Which store and warehouse to ship from. |
| planName | Your label for this shipment plan. |
| fulfillmentSplit | Packing strategy (`Box First, Split Later`). |
| shipDate / deliveryWindowStartDate | Shipping schedule. |
| planFolder | Hyperlink to the STA spreadsheet (auto-generated). |
| planId / shipmentId | Amazon's plan and shipment identifiers (auto-filled). |
| fbaLabel / fbaId | FBA label PDF link and confirmation ID (auto-filled). |
| amazonReferenceId | Amazon's reference number confirming readiness (auto-filled). |
| status | Current shipment status (`WORKING`, `SHIPPED`, `CLOSED`). |
| carrier / tracking | Your carrier and tracking number. |
| remark | Internal notes. |
## Creating your STA shipment [#creating-your-sta-shipment]
In Seller Central, creating an FBA shipment plan means clicking through 5+ pages of forms — entering the ship-from address, adding products one by one, filling box dimensions, selecting carriers. For each shipment. Every time.
SellerSheet's sidebar walks you through numbered steps. Each button calls the Amazon API and fills the results back into your sheet. The entire flow takes a few clicks instead of dozens of form pages. Every button of the panel is listed on [FBA](/help/sheets/sellers/fba).
### 1. Create the STA spreadsheet [#1-create-the-sta-spreadsheet]
On the **Manage Shipments** sheet, fill in a row with your shipment details:
1. Set **Store** and **Warehouse Code** (must match Shipment Setting).
2. Enter a **Plan Name** (your internal label).
3. Set **Fulfillment Split** to `Box First, Split Later`.
4. Fill in **Ship Date** and **Delivery Window Start Date**.
5. Click **Create STA SS** in the sidebar.
SellerSheet creates a new spreadsheet in organized Google Drive folders (Store › Country › Year › Month) and opens it. The STA sheet is pre-populated with your warehouse address from Shipment Setting and product data from Product Info via VLOOKUP.
### 2. Fill the STA sheet [#2-fill-the-sta-sheet]
The STA sheet has two main areas: the **header section** (filled from your Manage Shipments row, with a step-by-step progress stepper) and the **item grid** (where you fill in your products and box assignments).
\[\[TODO: screenshot STA sheet showing shipment overview, logistics, packing configuration, and item grid (retake — the old one showed real store data)]]
**Header section.** Holds the shipment overview (Store, Plan Name, Fulfillment Split, Send From Address, Ship Date, Delivery Window Start Date, the box dimension and weight units, FNSKU Label Size, FBA Box Label Size), the progress stepper with the IDs Amazon returns (Packing Option, Placement Option, fees), and — once confirmed — the FBA ID, Reference ID and warehouse.
**Item grid.** Columns boxNo, msku, image, fnsku, title, asin, qtyPerBox, boxDimensions, boxWeight, boxes, quantity, expiration, labelOwner, prepOwner, prepCategory, prepTypes. Fill in:
1. **boxNo** — which boxes contain this product (e.g. `1~3` means boxes 1 through 3).
2. **msku** — your Merchant SKU. VLOOKUP fills fnsku, title, asin, qtyPerBox, boxDimensions, boxWeight, labelOwner, prepOwner, prepCategory, and prepTypes from Product Info.
3. **boxes** — how many boxes for this product line (calculated from the boxNo range).
Use `1~3` to indicate boxes 1 through 3 share the same contents. Each range or number on a separate row represents a distinct product-to-box assignment.
### 3. Initiate the plan [#3-initiate-the-plan]
Click **Initiate Plan** in the sidebar. SellerSheet calls the Amazon API to:
1. Create an inbound plan with your products and box configuration.
2. Generate packing options.
3. Confirm the packing option at once if only one exists.
The progress stepper marks steps **1a** and **1b** as done.
If Amazon returns several packing options, pick one in the stepper's **1b** cell, then click **Confirm Pack**. After packing is confirmed, click **Set Box Info** to send your box dimensions and weights to Amazon.
### 4. Generate options [#4-generate-options]
Amazon returns three types of options, each fetched by its own button:
* **Placement options** — click **Gen Placement Opts.** Amazon returns which fulfillment centers to ship to, with their placement fees. Each shipment's warehouse, weight and volume land in the **STA-Options** sheet. Pick a placement in the stepper's **2** cell.
* **Transportation options** — click **Gen Trans. Opts.** Shipping methods (Amazon Partnered Carrier vs. Use Your Own Carrier), with cost and mode, land in the STA-Options **Transportation** dropdowns — pick one per shipment there.
* **Delivery windows** — own-carrier shipments only: click **Gen Delivery Window** to fill the STA-Options **Delivery Window** dropdowns, then pick a slot per shipment.
When Amazon splits items to different warehouses, STA-Options holds one row per shipment, each with its own dropdowns. See [Handling multiple shipments](#handling-multiple-shipments) below.
| Transportation option | What it means |
| -------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `AMAZON_PARTNERED_CARRIER` | Amazon handles pickup and delivery. No delivery window selection needed — Amazon manages the scheduling. |
| `USE_YOUR_OWN_CARRIER` | You arrange your own shipping. Click **Gen Delivery Window** to get available delivery slots, then select one. |
### 5. Confirm the shipment [#5-confirm-the-shipment]
Once you've selected your options, click **Confirm Shipment**. SellerSheet performs the full confirmation sequence:
1. Confirms the placement option picked in the stepper.
2. Confirms each shipment's transportation option (carrier selection).
3. Confirms each shipment's delivery window (if using your own carrier).
After confirmation:
* The **FBA ID**, **Reference ID** and warehouse appear in the STA header and in STA-Options; the FBA ID becomes the link to the label PDF once Amazon has it.
* **Status** updates to `WORKING`.
* The **Manage Shipments** sheet is updated with the confirmed shipment row.
When Amazon splits your plan into multiple shipments, **Confirm Shipment** processes all shipments for the selected placement option at once. Each gets its own FBA label PDF and row in Manage Shipments.
### 6. Get the Reference ID [#6-get-the-reference-id]
Click **Get Ref. ID** to check whether Amazon has assigned a Reference ID to your shipment. If ready, the Reference ID is filled in (and mirrored to Manage Shipments) and the status may update. If not ready yet, wait 5–10 minutes and try again.
The Reference ID confirms Amazon is ready to receive your shipment. It typically takes 5–10 minutes to generate after confirmation. Don't worry if it shows "Not Ready" immediately.
## Getting labels [#getting-labels]
Downloading FBA carton labels from Seller Central means finding the right shipment, navigating to the labels page, and downloading one PDF at a time. For FNSKU labels, you need a separate barcode generator tool.
### FBA carton labels [#fba-carton-labels]
Set **FBA Box Label Size** in the STA header, then click **Get FBA Box Labels** in the sidebar. SellerSheet downloads the FBA carton label PDF to your Google Drive in the plan folder. The **FBA ID** cell becomes a clickable hyperlink to the PDF.
This also works from the **Manage Shipments** sheet — select the row and download the labels for any shipment.
### FNSKU item labels [#fnsku-item-labels]
To generate FNSKU barcode labels for individual items:
1. Set **FNSKU Label Size** in the STA sheet header (e.g. `30x50 mm`, `4x6 inch`).
2. Click **Get FNSKU Labels** in the sidebar.
SellerSheet generates a barcode label for every unit across all boxes (qtyPerBox × boxes) and opens them in a print dialog. Labels are grouped by FNSKU with a summary page showing the box breakdown and total label count — ready for printing.
## Handling multiple shipments [#handling-multiple-shipments]
Amazon often splits your inbound plan into multiple shipments going to different fulfillment centers. In Seller Central, you have to manage each split separately — different carriers, different delivery windows, different labels. Tracking everything across multiple shipment IDs gets overwhelming.
When Amazon splits your items, SellerSheet fills the **STA-Options** sheet with one row per shipment per placement option. Each row has its own:
* **Shipment ID** — unique identifier for each split.
* **Transportation Option ID** — chosen independently per shipment (e.g. Amazon Partnered for one warehouse, your own carrier for another).
* **Delivery Window Option ID** — delivery slot per shipment (only needed for `USE_YOUR_OWN_CARRIER`).
* **Reference ID / Status** — tracked per shipment after confirmation.
How it works:
1. After **Gen Placement Opts.** and **Gen Trans. Opts.**, review the STA-Options rows.
2. Select the **Placement Option** in the stepper's **2** cell on the main STA sheet (options show the fulfillment centers and fee).
3. For each shipment row in STA-Options, select your preferred Transportation Option and Delivery Window Option. **Match Carriers** copies shipment 1's carrier to the other shipments of the same placement.
4. Click **Confirm Shipment** — all shipments for the selected placement are confirmed in one click.
5. Each shipment gets its own FBA label PDF and its own row in Manage Shipments.
An **Inbound PL** (Packing List) sheet is also created showing the detailed item breakdown per shipment — which products go to which fulfillment center.
Different placement options may have different fees. Check the fee of each placement option before confirming — choose the option that balances cost and delivery speed for your needs.
## Track & manage shipments [#track--manage-shipments]
The **Manage Shipments** sheet is your central dashboard for all FBA shipments. After confirming, each shipment appears as a row with its data filled in:
* **Plan Folder** — clickable link back to the STA spreadsheet.
* **FBA Label** — direct link to the carton label PDF.
* **Status** — tracks the lifecycle: `WORKING` → `SHIPPED` → `CLOSED`.
* **Carrier / Tracking** — fill in your carrier name and tracking number after shipping.
Click **Refresh Shipment** in the sidebar to refresh the status of every open shipment on the sheet from Amazon at any time.
Made a mistake? Click **Cancel Plan** in the sidebar before shipping to cancel the entire inbound plan. Every step of the stepper and the Status cell become `CANCELLED`.
## Quick reference [#quick-reference]
| What you need | Action | Sheet |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------- | -------------------------- |
| Set up warehouse address | Fill once, reuse for all shipments | `Shipment Setting` |
| Prepare product catalog | Fill SKU / FNSKU / ASIN / box details | `Product Info` |
| Create a new shipment | Fill row → **Create STA SS** | `Manage Shipments` → `STA` |
| Walk through the STA workflow | **Initiate Plan** → **Gen Placement Opts.** → **Gen Trans. Opts.** → **Confirm Shipment** → **Get Ref. ID** | `STA` |
| Print carton labels | **Get FBA Box Labels** | `STA` |
| Print item barcodes | **Get FNSKU Labels** | `STA` |
| Track all shipments | View status, labels, tracking; **Refresh Shipment** | `Manage Shipments` |
## Maximizing efficiency [#maximizing-efficiency]
* **Reuse Product Info:** fill your product catalog once. Every new STA sheet fills product data via VLOOKUP — no re-entering box dimensions or prep details.
* **Auto-import with FBA inventory reports:** use [Store Reports](/guides/create-store-reports-in-google-sheets) to create FBA Inventory Reports and get SKU, FNSKU, ASIN, and title imported automatically.
* **Batch shipments:** create multiple rows in Manage Shipments and generate STA spreadsheets for each — work on them in parallel across different tabs.
* **Multiple warehouses:** set up multiple warehouse codes in Shipment Setting for different ship-from locations. Select the right one per shipment.
* **After shipment:** for listing management (updating prices, titles, or adding ASINs), see the [Create Listings guide](/guides/bulk-create-revise-amazon-listings-in-google-sheets).
# How to Create Store Reports in Google Sheets (https://sellersheetai.com/guides/create-store-reports-in-google-sheets)
> Get any Amazon store report into Google Sheets — ask your AI client over SellerSheet MCP, request and download it from the sidebar, or find reports Amazon already generated, like settlements.
Amazon Seller Central offers dozens of report types — inventory, orders, settlement, FBA and more. But getting them into a spreadsheet where you can actually analyze the data? That's where the frustration begins: logging into Seller Central, navigating menus, waiting for reports to generate, downloading CSV files, importing them by hand — and doing it all again tomorrow.
SellerSheet's **Store Reports** removes all of that. It offers distinct workflows, each for a specific seller pain point:
* **Ask your AI client** — describe the report in plain language and let your AI do the create → poll → download cycle over SellerSheet MCP.
* **Create & download reports** — need a specific report right now? Request it from Google Sheets and download the result in one click.
* **Search & download existing reports** — need a settlement report that Amazon generates by itself? Search for it by date range and download it without opening Seller Central.
* **Synced reports** — the reports you need every day are already synced into SellerSheet's report warehouse on a schedule.
## Prerequisites [#prerequisites]
* **Store connected:** your Amazon store is connected under **Settings → Stores & Marketplaces** in the [SellerSheet app](https://sellersheetai.com/home).
* **Sidebar installed:** the SellerSheet add-on is installed in Google Sheets. If not, follow [Install & first sync](/help/sheets/install).
## Using Claude Code + SellerSheet MCP [#using-claude-code--sellersheet-mcp]
Opening Seller Central, navigating menus, waiting for reports, downloading files and importing them into a spreadsheet — every time, for every report. Even with the sidebar, you still click through the steps. What if you could just ask: "Get me the orders report for last week and save it to my Drive"?
With SellerSheet MCP connected to your AI client (Claude Code, Claude Desktop, ChatGPT/Codex, Cursor or any MCP client), you describe what you want in plain language. Your AI runs the whole create → poll → download → analyze cycle — no sidebar clicking.
```text
Get me the Flat File All Orders report for myStore-AE from March 1–7, 2026.
Save it to my Drive and write the link to my Store Reports tracking sheet.
```
Your AI calls these tools in sequence:
* `reports_getReports` — checks the reports Amazon already holds before creating a new one, which saves time on duplicate requests.
* `reports_createReport` — submits the report request to Amazon SP-API and returns the report ID at once; your AI writes it to your tracking sheet with `write_sheet`.
* `reports_getReport` — polls until the report is DONE (1–15 minutes depending on the type) and returns its download link; your AI saves the file to your Drive with `save_url_to_drive`.
\[\[TODO: screenshot Claude Code creating a store report over SellerSheet MCP (create → poll → download)]]
Add the server `https://sellersheetai.com/mcp` to your client: it opens a browser, you sign in to SellerSheet and approve. Clients that cannot do OAuth use an API key from **Settings → API & MCP** as `Authorization: Bearer `. The same tools then work across all your AI workflows — see [MCP & API](/docs/mcp-api).
## How the sidebar works [#how-the-sidebar-works]
Before diving into Store Reports, it helps to know how SellerSheet works in general. Every feature follows the same three-step pattern:
1. **Go to the right sheet** — each feature has its own spreadsheet and sheet tabs. Open the correct one first.
2. **Fill in the colored columns** — **yellow** = required, **light yellow** = optional, **gray** = auto-filled.
3. **Click the sidebar button** — buttons inside a named dropdown only work when you're on the matching sheet tab.
### Button types [#button-types]
* **Sheet-specific (inside a dropdown):** only work on the matching sheet. Example: the buttons inside the "Store Reports" dropdown require you to be on the **Store Reports** sheet.
* **Global (standalone, not inside any dropdown):** work from any sheet of the spreadsheet.
For the full guide — including color coding and tooltips — see [the add-on documentation](/help/sheets).
## Getting started [#getting-started]
The first time, SellerSheet creates a **Store Reports** spreadsheet in your `SellerSheet` Google Drive folder. It contains the sheet tabs **Store Reports**, **Report Lookup** and **Store Report Type** (the list of available report types).
### Opening the Store Reports spreadsheet [#opening-the-store-reports-spreadsheet]
There are two ways to get to your Store Reports spreadsheet:
* **From Google Drive:** open your **SellerSheet** folder in Google Drive, then the **Store Reports** spreadsheet. Launch the sidebar from **Extensions → SellerSheet** and go to the **Store Reports** panel.
* **From the sidebar:** open the sidebar in any Google Sheet, go to the **Store Reports** panel and open the spreadsheet from its **Resources** section — then reopen the sidebar from Extensions.
\[\[TODO: screenshot the SellerSheet sidebar with the Store Reports panel]]
### Starting fresh or recovering deleted resources [#starting-fresh-or-recovering-deleted-resources]
SellerSheet remembers each spreadsheet and folder by its ID. As long as the resource exists, it keeps using it. If a resource is deleted or can't be found, SellerSheet creates a new one and remembers the new ID from then on.
Click **Re-Initiate Resources** in the sidebar. SellerSheet checks every folder, spreadsheet and sheet tab by name — if the exact name is missing, it recreates it from a fresh template. Resources that already exist are left untouched.
* **Want a clean sheet?** Rename the existing sheet tab (e.g. **Store Reports** → **Store Reports - Backup**), then click Re-Initiate Resources. SellerSheet sees the original name as missing and creates a fresh template next to your renamed copy.
* **Want a full backup?** Use **File → Make a copy** to duplicate the whole spreadsheet first, then clear the data in the original. SellerSheet keeps using the original because its ID hasn't changed.
* **Deleted something by accident?** Click the missing item in the sidebar's resources or run Re-Initiate Resources. SellerSheet creates a new resource and remembers it automatically.
## Workflow 1: Create & download reports [#workflow-1-create--download-reports]
You need a specific report — inventory health, order data, FBA fees — but getting it means logging into Seller Central, opening Reports, requesting the report, waiting for it, downloading the CSV and importing it into your spreadsheet. For several reports or several stores, that takes hours.
With SellerSheet, you request any Amazon report and download it straight into a Google Sheet from the **Store Reports** sheet:
### 1. Configure your report rows [#1-configure-your-report-rows]
In the **Store Reports** sheet, from row 4 down, fill in the required columns:
1. **Report Type:** switch to the **Store Report Type** sheet to see all available report types. Copy the exact Report Type you want (e.g. `GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA`).
2. **Store:** enter your store ref — the store name plus the country code (e.g. `myStore-US`).
3. **Time frame (optional):** some reports require a date range. Fill in **Data Start Time** and **Data End Time** if needed.
| Color | Type | Meaning |
| ------------ | ----------- | ------------------------------------------------ |
| Yellow | Required | Must be filled (Report Type, Store). |
| Light yellow | Optional | Optional fields (Data Start/End Time). |
| Gray | Auto-filled | System-managed (Report ID, Status). Do not edit. |
### 2. Create the report [#2-create-the-report]
Click **Create Reports** in the sidebar. SellerSheet sends the request to Amazon through the SP-API. On success, the **Request Time** and **Report ID** columns fill in automatically. Rows that already have a Report ID are skipped — no duplicates.
### 3. Download the report [#3-download-the-report]
After a moment for Amazon to process the report, click **Get Reports** in the sidebar. SellerSheet checks the status of each Report ID with Amazon:
* **IN_QUEUE / IN_PROGRESS:** Amazon is still preparing the report. Try again in a minute.
* **DONE:** the report is ready. SellerSheet downloads it to `SellerSheet/StoreReports/{Report Name}` in your Drive.
* **CANCELLED:** the report had no data — Amazon cancelled it.
* **FATAL:** error in the request (wrong report type or a missing required time frame).
When the status is **DONE**, the **Sheet URL** and **Folder URL** columns fill in with links to your downloaded report.
\[\[TODO: screenshot the Store Reports sheet with configured rows, Report IDs and download links]]
Fill out several rows at once — different reports, different stores, different date ranges. SellerSheet processes **all valid rows** of the active sheet when you click Create Reports or Get Reports. Request 20 reports in one click instead of one at a time.
For a shorter walkthrough of this workflow with screenshots, see [How to Download Amazon Reports in Google Sheets](/guides/download-amazon-reports-in-google-sheets).
## Workflow 2: Search & download existing reports [#workflow-2-search--download-existing-reports]
Some of the most important reports — like **settlement reports** — are generated by Amazon on a regular schedule. You can't request them yourself. To get a Flat File V2 Settlement Report, you open Seller Central's Payments section, find the settlement period, download the file and import it by hand. With several stores or historical settlement data, that becomes a huge time sink.
The **Report Lookup** sheet searches Amazon for reports that already exist — by type and date range — so you can download them straight into Google Sheets.
### 1. Set your search criteria [#1-set-your-search-criteria]
Go to the **Report Lookup** sheet and fill in the filter row (row 4) with your search parameters:
* **Store:** your store ref (e.g. `myStore-US`).
* **Report Type:** the report type to search for (e.g. `GET_V2_SETTLEMENT_REPORT_DATA_FLAT_FILE_V2`).
* **Created Since** (optional): only show reports created after this date.
* **Created Until** (optional): only show reports created before this date.
### 2. Search for reports [#2-search-for-reports]
With **Report Lookup** as your active sheet, open the sidebar and go to the **Store Reports** panel. Expand the **Report Lookup** dropdown, then click **Search Reports**. SellerSheet asks Amazon for all reports matching your criteria.
### 3. View results and download [#3-view-results-and-download]
Results appear from **row 6** down, showing each report's ID, type, data dates, creation time and processing status. To download a specific report:
1. Copy the **Report ID** from the search results.
2. Go to the **Store Reports** sheet and paste the Report ID into a new row (with the Store).
3. Click **Get Reports** in the sidebar to download it to your Drive.
\[\[TODO: screenshot the Report Lookup sheet with settlement report search results]]
Amazon generates settlement reports every 14 days. Use the **Created Since** and **Created Until** filters to narrow down to the exact settlement period you need — no more scrolling through dozens of reports in Seller Central.
## Synced reports: no scheduling needed [#synced-reports-no-scheduling-needed]
You need up-to-date data every day — active listings, inventory levels, orders — but requesting the same reports each morning is unsustainable. SellerSheet syncs a set of Amazon reports for every connected store on a schedule, into its report warehouse — see [Data](/docs/data) for the tables. You don't schedule anything in a sheet:
* Your AI client reads the synced rows with `query_report_data`, without calling Amazon again.
* `list_report_syncs` shows each store's sync schedules, so your AI can check the data is fresh before trusting it.
Use the Store Reports sheet for anything the warehouse does not hold, or for a one-off date range.
## Which workflow should you use? [#which-workflow-should-you-use]
| What you need | Workflow | Where | Best for |
| ---------------------------------------- | --------------------------- | -------------------------------------------- | ---------------------------------------------------------- |
| Any report, described in plain language | Your AI client over MCP | `reports_createReport` + `reports_getReport` | Power users and AI workflows — full automation |
| A specific report right now | Create & download (sidebar) | Store Reports sheet | Inventory, orders and FBA reports with custom date ranges |
| Amazon-generated reports | Search & download (sidebar) | Report Lookup sheet | Settlement and reimbursement reports |
| Daily data (listings, inventory, orders) | Synced reports | `query_report_data` | Dashboards and analysis on data that stays fresh by itself |
## Maximizing efficiency with Google Sheets [#maximizing-efficiency-with-google-sheets]
Your report data lands directly in Google Sheets — the most flexible analysis tool for Amazon sellers. To get the most out of it:
* **Bulk requests across stores:** fill several rows with different reports and different store refs. SellerSheet processes them all in one click — ideal for multi-marketplace sellers.
* **Smart duplicate prevention:** rows with an existing Report ID are skipped by Create Reports; rows already marked DONE are skipped by Get Reports. No accidental double downloads.
* **Organized Drive storage:** reports are saved to `SellerSheet/StoreReports/{Report Name}` folders in your Google Drive, neatly categorized.
* **Settlement analysis:** use Search Reports to find settlement data, download it, then use Google Sheets formulas and pivot tables to analyze fees, refunds and net proceeds in one place.
Every button of the panel is listed on [Store Reports](/help/sheets/sellers/store-reports).
# How to Download Amazon PPC Reports in Google Sheets (https://sellersheetai.com/guides/download-amazon-ppc-reports-in-google-sheets)
> Download and analyze Amazon Sponsored Products advertising reports directly in Google Sheets. Create reports, track status, and get campaign, keyword, targeting, and search term data — all from the SellerSheet sidebar.
## Introduction [#introduction]
Analyzing Amazon PPC performance means logging into Seller Central, navigating to Campaign Manager, selecting date ranges, choosing report types, waiting for downloads, and then copy-pasting data into spreadsheets. For multiple report types or multiple stores, this becomes a daily time sink.
SellerSheet's **Ads Reports** feature lets you request and download Amazon Sponsored Products advertising reports directly into Google Sheets. Fill in your store, report type, and date range — then click two buttons in the sidebar to queue the report and retrieve the data.
This guide covers the full workflow: setting up the **Ads Reports** sheet, choosing from **10 report types** (campaigns, keywords, targeting, search terms, and more), and downloading the results into dedicated spreadsheets for analysis.
1. **Set up the sheet** — store, report type, dates.
2. **Create Reports** — queue them on Amazon's servers.
3. **Get Reports** — download the completed data.
4. **Analyze** — full metrics in Sheets.
## Prerequisites [#prerequisites]
* **Store connected:** connect your Amazon store under **Settings → Stores & Marketplaces** in the [SellerSheet app](https://sellersheetai.com/home).
* **Advertising authorized:** authorize Amazon Advertising API access for your store. This is a separate authorization from the SP-API store authorization.
* **Sidebar installed:** install the SellerSheet add-on in Google Sheets. See [Install & first sync](/help/sheets/install).
* **Active PPC campaigns:** you need active or historical Sponsored Products campaigns to generate reports.
## Setting up the Ads Reports sheet [#setting-up-the-ads-reports-sheet]
In Seller Central, downloading PPC reports means navigating Campaign Manager, selecting report types one at a time, waiting for each to generate, then downloading CSVs and importing them into your spreadsheet. For multiple report types across multiple stores, this takes a significant amount of time every week.
The **Ads Reports** sheet is where you define what reports you want. Each row represents one report request. You fill in the store, report type, and date range — then the sidebar handles the rest.
\[\[TODO: screenshot the Ads Reports sheet with the sidebar (retake — the old one showed a real store and spreadsheet)]]
### Ads Reports columns [#ads-reports-columns]
* **Store:** your store ref with country code (e.g. `myStore-US`).
* **Name:** the report type name. Must match one of the [supported report types](#available-report-types).
* **Start Date:** beginning of the reporting period.
* **End Date:** end of the reporting period.
* **Report ID:** *(auto-filled)* Amazon's unique identifier for the queued report.
* **Status:** *(auto-filled)* current status — `PENDING` or `COMPLETED`.
* **Report Sheet:** *(auto-filled)* hyperlink to the generated spreadsheet with full report data.
* **Report Folder:** *(auto-filled)* Google Drive folder where the report spreadsheet is saved.
To set up a report request, fill in a row with:
1. **Store** — select your store (e.g. `myStore-US`).
2. **Name** — enter the exact report type name (see [Available report types](#available-report-types) below).
3. **Start Date** — the first day of data you want.
4. **End Date** — the last day of data you want.
Add multiple rows for different report types and date ranges. **Create Reports** processes all rows at once, so you can queue a campaign summary, keyword report, and search term report in a single click.
## Step 1: Create Reports [#step-1-create-reports]
After filling in your report rows, open the SellerSheet sidebar, go to the **Ads** tab and its [Reports](/help/sheets/ads/reports) panel, and click **Create Reports**.
SellerSheet sends each report request to Amazon's Advertising API. For each row it:
1. Validates that **Store**, **Name**, **Start Date**, and **End Date** are filled in.
2. Constructs the full report configuration (columns, filters, groupBy, timeUnit) based on the report type name.
3. Sends the request to Amazon.
4. Writes the returned **Report ID** and **Status** back to the sheet.
Most reports start with status `PENDING` while Amazon generates the data. Some small reports may complete immediately and show `COMPLETED`.
The **Name** column must exactly match one of the supported report type names (e.g. `SponsoredProductsTargetingSummaryReport`). Misspellings or unsupported names will fail. See the [full list below](#available-report-types).
## Step 2: Get Reports [#step-2-get-reports]
Once your reports have a **Report ID**, click **Get Reports** in the sidebar. SellerSheet checks the status of each pending report:
* **If COMPLETED:** downloads the full report data, creates a new Google Spreadsheet in your Drive, populates it with headers and all data rows, and writes a clickable hyperlink to the **Report Sheet** column.
* **If still PENDING:** updates the status. Wait a few minutes and click **Get Reports** again.
The generated spreadsheet contains every metric Amazon provides for the report type — impressions, clicks, spend, sales, ACOS, ROAS, and more, depending on the [report type](#available-report-types).
Amazon typically generates advertising reports within 1–5 minutes. If a report is still `PENDING`, wait a few minutes and click **Get Reports** again. Rows that already have a **Report Sheet** link are automatically skipped.
## Available report types [#available-report-types]
SellerSheet supports **10 Sponsored Products report types**. Each covers different dimensions and time granularities. Use the exact **Name** in the table below when filling in your Ads Reports sheet.
| Report Name | Time Unit | What It Covers |
| ------------------------------------------------------ | --------- | --------------------------------------------------------------- |
| `SponsoredProductsCampaignsSummaryReport` | Summary | Campaign-level performance summary |
| `SponsoredProductsCampaignsWithPlacementSummaryReport` | Summary | Campaign performance broken down by ad placement |
| `SponsoredProductsCampaignsWithAdGroupDailyReport` | Daily | Campaign and ad group level daily metrics |
| `SponsoredProductsKeywordsSummaryReport` | Summary | Keyword-level performance summary |
| `SponsoredProductsKeywordsAndTargetingSummaryReport` | Summary | Combined keywords and targeting performance |
| `SponsoredProductsTargetingSummaryReport` | Summary | Targeting-level performance (product targeting, auto targeting) |
| `SponsoredProductsSearchTermSummaryReport` | Summary | Search term performance and customer query analysis |
| `SponsoredProductsAdvertisedProductDailyReport` | Daily | Daily performance for each advertised product (ASIN/SKU) |
| `SponsoredProductsPurchasedProductDailyReport` | Daily | Products actually purchased through ad clicks (attribution) |
| `SponsoredProductsGrossAndInvalidTrafficDailyReport` | Daily | Gross vs invalid traffic tracking and click quality |
### Summary vs daily reports [#summary-vs-daily-reports]
* **Summary:** aggregated data for the entire date range. One row per campaign/keyword/targeting. Best for period-over-period comparisons.
* **Daily:** one row per day per entity. Best for trend analysis and identifying daily performance fluctuations.
## Report metrics [#report-metrics]
Each report spreadsheet contains 30–60 columns depending on the report type. Key metrics include:
| Category | Metrics |
| ----------- | ---------------------------------------------------------------------------------- |
| Traffic | impressions, clicks, clickThroughRate, costPerClick |
| Spend | cost, spend |
| Conversions | purchases (1d/7d/14d/30d attribution windows), unitsSoldClicks |
| Revenue | sales (1d/7d/14d/30d attribution windows) |
| Efficiency | acosClicks (7d/14d), roasClicks (7d/14d) |
| Dimensions | campaignName, adGroupName, keyword, targeting, advertisedAsin, purchasedAsin, date |
## Example workflow [#example-workflow]
Here's a typical workflow for pulling weekly PPC reports:
1. **Add report rows** to the Ads Reports sheet:
| Store | Name | Start Date | End Date |
| ---------- | ---------------------------------------- | ---------- | ---------- |
| myStore-US | SponsoredProductsCampaignsSummaryReport | 2025-07-01 | 2025-07-07 |
| myStore-US | SponsoredProductsSearchTermSummaryReport | 2025-07-01 | 2025-07-07 |
| myStore-US | SponsoredProductsTargetingSummaryReport | 2025-07-01 | 2025-07-22 |
2. **Click Create Reports** in the sidebar — all 3 reports are queued simultaneously. Report IDs and statuses appear in the sheet.
3. **Wait 1–5 minutes** for Amazon to generate the reports.
4. **Click Get Reports** — completed reports get a clickable link in the Report Sheet column. Click any link to open the full data in a new spreadsheet.
## Quick reference [#quick-reference]
| What You Need | Action | Result |
| --------------------------- | ---------------------------------- | ------------------------------------------- |
| Queue reports on Amazon | **Create Reports** | Report ID + Status filled in |
| Download completed data | **Get Reports** | New spreadsheet with full report data |
| Campaign-level overview | Use `CampaignsSummaryReport` | Spend, sales, ACOS per campaign |
| Keyword optimization | Use `KeywordsSummaryReport` | Performance per keyword and match type |
| Discover new keywords | Use `SearchTermSummaryReport` | Customer search queries that triggered ads |
| Product-level ASIN analysis | Use `AdvertisedProductDailyReport` | Daily metrics per advertised ASIN/SKU |
| Attribution analysis | Use `PurchasedProductDailyReport` | Which products customers actually purchased |
## Tips for PPC analysis [#tips-for-ppc-analysis]
* **Weekly routine:** set up the same report rows each week with updated dates. Create Reports on Monday morning, Get Reports a few minutes later, and you have last week's data ready to analyze.
* **Multiple stores:** add rows for different stores in the same sheet. Each row targets the store specified in the Store column, so you can pull reports for all your marketplaces at once.
* **Search term mining:** use the `SearchTermSummaryReport` to find high-converting customer search queries, then add them as exact match keywords to your campaigns.
* **ACOS tracking:** the `CampaignsSummaryReport` gives you ACOS (acosClicks7d/14d) and ROAS (roasClicks7d/14d) per campaign — perfect for identifying campaigns that need bid adjustments.
* **Placement analysis:** use `CampaignsWithPlacementSummaryReport` to see how your ads perform in Top of Search vs Rest of Search vs Product Pages. Adjust placement modifiers based on this data.
Every button of the panel is listed on [Ads → Reports](/help/sheets/ads/reports).
# How to Download Amazon Reports in Google Sheets (https://sellersheetai.com/guides/download-amazon-reports-in-google-sheets)
> Request Amazon Seller Central reports from Google Sheets, track their status, and download the finished reports to Google Drive with links in your sheet.
Requesting and downloading Amazon reports directly from Google Sheets streamlines your workflow. This guide shows you how to use SellerSheet to request, track and download reports like Inventory, Orders and Tax reports.
## Prerequisites [#prerequisites]
* **Store connected:** your Amazon store is connected under **Settings → Stores & Marketplaces** in the [SellerSheet app](https://sellersheetai.com/home).
* **Sidebar installed:** the SellerSheet add-on is installed in Google Sheets. If not, follow [Install & first sync](/help/sheets/install).
## Step 1: Open the reports spreadsheet [#step-1-open-the-reports-spreadsheet]
You work in the **Store Reports** spreadsheet. There are two ways to find it:
* Go to your Google Drive root folder and open the **SellerSheet** folder.
* Or open the SellerSheet sidebar, go to the **Store Reports** panel, and open the Store Reports spreadsheet from its **Resources** section.
## Step 2: Configure your report [#step-2-configure-your-report]
In the spreadsheet, go to the **Store Reports** sheet. This is where you configure report requests, one per row from row 4 down.
### Understanding column colors [#understanding-column-colors]
| Color | Type | Meaning |
| ------------ | ----------- | ------------------------------------------------------------- |
| Yellow | Required | Must be filled (e.g. Store, Report Type). |
| Light yellow | Optional | Optional or conditional (e.g. Data Start/End Time). |
| Gray | Auto-filled | Do not edit. The system fills these (e.g. Report ID, Status). |
You don't have to do this one by one. Fill out several rows with different reports or stores. When you click **Create Reports** or **Get Reports**, SellerSheet applies the action to **all valid rows in the active sheet** at once.
\[\[TODO: screenshot Store Reports sheet with the report type and store filled in (retake — the old one showed real store data)]]
### Filling the data [#filling-the-data]
1. **Find the report type:** switch to the **Store Report Type** sheet for the list of available reports. Copy the exact **Report Type** of the report you want (e.g. `GET_FLAT_FILE_OPEN_LISTINGS_DATA`).
2. **Paste the report type:** go back to the **Store Reports** sheet and paste it into the **Report Type** column.
3. **Enter the store:** fill in the **Store** column with the store ref — your store name plus the country code (e.g. for a store named "myStore" in the UAE, enter `myStore-AE`).
4. **Time frame (optional):** if the report requires a date range (like 30 days), fill in **Data Start Time** and **Data End Time**.
## Step 3: Create reports [#step-3-create-reports]
Once your rows are configured:
1. Open the sidebar and go to the **Store Reports** panel.
2. Click **Create Reports**.
SellerSheet sends the requests to Amazon. On success, it fills the **Request Time** and **Report ID** columns automatically. A row that already has a **Report ID** is skipped.
## Step 4: Get reports [#step-4-get-reports]
After requesting reports, check their status and download them:
1. Click **Get Reports** in the sidebar.
2. SellerSheet checks the status of each **Report ID** with Amazon.
### Processing status meanings [#processing-status-meanings]
* **IN_QUEUE / IN_PROGRESS:** Amazon is still preparing the report. Try again later.
* **DONE:** the report is ready. SellerSheet downloads it to your Drive in `SellerSheet/StoreReports/{Report Name}`.
* **CANCELLED:** usually means the report contains no data and Amazon cancelled it.
* **FATAL:** error in the request (e.g. an incorrect report type or a missing required time frame).
Once a report is **DONE**, the **Sheet URL** and **Folder URL** columns fill in with links to your new report file.
## Important notes [#important-notes]
* **Active sheet scope:** both **Create Reports** and **Get Reports** apply to the **active sheet** — they process all valid rows of the sheet you are viewing.
* **Skipping logic:** **Create Reports** skips rows that already have a Report ID. **Get Reports** skips rows whose status is already DONE, CANCELLED or FATAL, or whose Sheet URL already exists.
For searching reports Amazon already generated (like settlement reports) and asking your AI client for a report in plain language, see [How to Create Store Reports in Google Sheets](/guides/create-store-reports-in-google-sheets). Every button of the panel is listed on [Store Reports](/help/sheets/sellers/store-reports).
# How to Fetch Live Amazon Listings in Google Sheets (https://sellersheetai.com/guides/fetch-live-listings-in-google-sheets)
> See any Amazon listing in Google Sheets — your own by SKU, or any catalog page by ASIN — to audit status and issues, check that Amazon took your change, and copy a listing into the Publish Queue.
* The **Listing Snapshot** tab shows a listing as a row: your own by **SKU**, or any Amazon catalog page by **ASIN**.
* **Fetch by SKU** gives you what you submitted, with its **Status** and **Issues**. **Fetch by ASIN** gives you what shoppers see, with its category and best-seller rank.
* Put the same product on both kinds of row to check whether Amazon took your change. Then copy the SKU, product type or JSON straight into the Publish Queue.
[Overview](/guides/manage-amazon-listings-in-google-sheets) · 1 [All your SKUs](/guides/see-all-amazon-skus-in-google-sheets) · **2 Live listings** · 3 [Competitor research](/guides/research-amazon-competitors-in-google-sheets) · 4 [Selling eligibility](/guides/check-asin-selling-eligibility-in-google-sheets) · 5 [Write listings with AI](/guides/write-amazon-listings-with-ai-in-google-sheets) · 6 [Bulk create & revise](/guides/bulk-create-revise-amazon-listings-in-google-sheets)
In Seller Central you open listings one at a time. Here every SKU's status and issues sit in one table, next to what shoppers really see. In this guide, the store **myStore-US** sells earbuds under the brand **myBrand**. You check three of its listings, look at a competitor's page, and check whether a new title went live.
## Before you start [#before-you-start]
* Connect your Amazon store at [sellersheetai.com](https://sellersheetai.com/home) under **Settings → Stores & Marketplaces**.
* Install the SellerSheet sidebar. See [Install & first sync](/help/sheets/install).
* In the sidebar's **Catalogs** panel, click **Catalog** under **Resources** to open the **SellerSheet Catalog** spreadsheet. Go to the **Listing Snapshot** tab and expand the **Listing Snapshot** group in the sidebar. Its buttons work only while that tab is open.
## The tab [#the-tab]
* You type **A Store**, and either **B SKU** or **C ASIN**. Everything else is filled by a fetch.
* **D Image** shows the main image. If a row can't be fetched, the reason is written here instead.
* **E JSON** holds Amazon's whole answer, including attributes that have no column of their own.
* **F Source** says which fetch filled the row: `Listing · SKU` or `Catalog · ASIN`.
Each row names its own store, so one tab can hold rows of several stores and marketplaces. You change listings on another tab, the **Publish Queue** (part 6).
## Lesson 1 — Audit your own listings (Fetch by SKU) [#lesson-1--audit-your-own-listings-fetch-by-sku]
### Fill the rows [#fill-the-rows]
From row 4, type `myStore-US` in column A and one SKU per row in column B: **EB-PRO-BLK**, **EB-PRO-WHT**, **EB-LITE-BLU**. To check your whole catalog, copy columns B and C (Store, SKU) of the [Catalog tab](/guides/see-all-amazon-skus-in-google-sheets) into columns A and B here.
### Click Fetch by SKU [#click-fetch-by-sku]
Click **Listing Snapshot › Fetch by SKU**. Each row fills from your listing, with its ASIN in column C. Only rows whose JSON cell is empty are fetched. With many rows, a click can stop after about five minutes; click again to continue.
### Read the rows [#read-the-rows]
| Column | What it tells you |
| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Status** | `BUYABLE` (shoppers can buy it) and `DISCOVERABLE` (shoppers can find it). Blank means neither. `NOT_ACCEPTED` means Amazon never accepted the listing. |
| **Issues** | One line per issue, such as `ERROR 90220: 'Item Highlight' is required but missing.` |
| **Last Updated** | When Amazon last changed the listing. |
| **Product Type** | The product type to use on the Publish Queue for this SKU. |
| **Parentage Level, Parent, Variation Theme, Color, Size** | Where the SKU sits in its variation family. Parent is the parent SKU. |
| **Brand Name … Generic Keyword** | The listing copy, in the Publish Queue's order, one bullet per line. |
| **Fulfillment Channel Code, Quantity, Your Price** | The offer. `DEFAULT` means you ship it; `AMAZON_NA`, `AMAZON_EU` and so on mean FBA. |
| **Main Image URL … Swatch Image URL** | Every image slot as a link. |
Select row 3 and turn on a filter (**Data › Create a filter**). On **Issues**, choose **Filter by condition › Is not empty**; or filter **Status** to blank. That leaves only the SKUs with a problem.
## Lesson 2 — Look at any ASIN (Fetch by ASIN) [#lesson-2--look-at-any-asin-fetch-by-asin]
1. On a new row, type `myStore-US` in column A and the ASIN in column C. Leave column B (SKU) blank. The ASIN can be yours or a competitor's.
2. Click **Listing Snapshot › Fetch by ASIN**.
The row fills from Amazon's catalog page, which is what shoppers see. Columns that only a catalog page has are filled too: **Browse Node** (the category Amazon files it under), **BSR Category** and **BSR Rank**. Status, Issues and the offer stay blank, because they belong to a seller's listing.
## Lesson 3 — Check whether Amazon took your change [#lesson-3--check-whether-amazon-took-your-change]
An `accepted` result in the Publish Queue means Amazon accepted your submission. But Amazon decides what the catalog page shows, and it may keep another value there, such as one from another seller or its own.
Put the product on two rows: one with the SKU (Fetch by SKU) and one with only the ASIN (Fetch by ASIN).
If the copy matches, your change is live. If it doesn't, Amazon still shows another value. Read the SKU row's **Issues**. To check again later, clear the ASIN row's JSON cell and click **Fetch by ASIN**.
## Lesson 4 — Take a listing into the Publish Queue [#lesson-4--take-a-listing-into-the-publish-queue]
Listing Snapshot only reads; you change a listing on the [Publish Queue](/guides/bulk-create-revise-amazon-listings-in-google-sheets). The tab hands over what the Publish Queue needs:
* **SKU and Product Type** are all **Get Template** needs. A `PARTIAL_UPDATE` row (change only the cells you fill) also needs the ASIN in **Merchant Suggested ASIN**.
* **JSON:** paste it into the Publish Queue's **Attributes JSON** and click **Fill from JSON**. The whole row is rebuilt from it, and an empty SKU or Product Type is filled too. JSON from an ASIN row has no SKU, so type your own — and if it is a competitor's page, replace their product ID with yours before you submit.
* **Copy and image URLs** use the Publish Queue's names and order, one bullet per line, so you can paste them straight across.
## Copy a listing to another marketplace [#copy-a-listing-to-another-marketplace]
This happens on the **Publish Queue** tab. It sends every row to the store in **A3**, in the language in **B3**, and its fetch keeps only that store's and language's values. So you build the template for the new marketplace, fetch from the old one, then switch:
1. Set **A3** to the new store, `myStore-UK`, and **B3** to **en_GB**. Type the product type in **D7** and click **Get Template**: the columns are now the UK ones.
2. Set **A3** back to `myStore-US` and **B3** to **en_US**. From row 7, type the SKUs in column B and `UPDATE` in column C, then click **Publish Queue › Fetch by SKU**.
3. Set **A3** to `myStore-UK` and **B3** to **en_GB** again.
4. Change what differs: the price and currency, and **Fulfillment Channel Code** for FBA (`AMAZON_NA` becomes `AMAZON_EU`).
5. Click **Validate (Preview)** and fix what Amazon lists. Then click **Create/Replace/Del.** or **Submit Feed**.
If the SKU already sells in that marketplace, `UPDATE` replaces that listing. For a marketplace in another language, translate the copy first with [Translate Listing (AI)](/guides/write-amazon-listings-with-ai-in-google-sheets).
## Tricks [#tricks]
* **Refresh a row:** clear its JSON cell and click the fetch again. Rows with JSON are never fetched again, so a second click only fills the new rows.
* **A row that failed** says why in its Image cell, for example `Not fetched: …`. Its JSON stays empty, so the next click retries it.
* **Compare marketplaces:** add one row per store for the same SKU (`myStore-US`, `myStore-UK`) and read them side by side.
* **Everything is in the JSON:** an attribute without its own column is still in column E. Search the cell (Ctrl+F, ⌘+F on a Mac) for its name.
## Frequently asked questions [#frequently-asked-questions]
### What is the difference between Fetch by SKU and Fetch by ASIN? [#what-is-the-difference-between-fetch-by-sku-and-fetch-by-asin]
Fetch by SKU reads your own listing — what you submitted — with its status, issues, price and stock. Fetch by ASIN reads Amazon's catalog page — what shoppers see — for any ASIN, yours or a competitor's, with its category and best-seller rank.
### How do I refresh a row? [#how-do-i-refresh-a-row]
Clear its JSON cell and click the fetch again. A row is fetched only while its JSON cell is empty, so a second click never overwrites rows you already have.
### Why does a row say "Not fetched" in the Image column? [#why-does-a-row-say-not-fetched-in-the-image-column]
The fetch failed for that row and the reason is written in its Image cell, for example a SKU that does not exist in that store. The JSON cell stays empty, so the next click tries the row again.
### What does NOT_ACCEPTED mean in the Status column? [#what-does-not_accepted-mean-in-the-status-column]
Amazon never accepted the listing, so it holds no listing data for the SKU — only issues. The Issues column says why. Fix them in the Publish Queue and submit the SKU again.
# Guides (https://sellersheetai.com/guides)
> Step-by-step guides for common Amazon and noon jobs — with the SellerSheet add-on in Google Sheets, or with your own AI agent over MCP.
Step-by-step guides, one job each. Many can be handed to your own AI agent over [MCP](/docs/mcp-api); every one also works in the Google Sheets add-on.
## Get connected [#get-connected]
Connect Claude, ChatGPT, Codex, Cursor and other AI clients to your SellerSheet account.
Create a noon API key and connect your noon account.
## Webhooks [#webhooks]
Get Amazon's changes to your listings, prices, brand content, offers and account in your team chat, or as signed JSON in your own system.
## Advertising [#advertising]
What an AI agent can do with your Amazon Ads budgets, rules and recommendations.
Watch live budget usage, apply Amazon's recommendations and set self-reverting budget rules for peak days — reviewed in your sheet.
Analyze advertising performance with Amazon Ads reports in Google Sheets.
Turn on AMC, then let your AI answer new-to-brand and campaign-overlap questions, live or from synced reports, and build audiences your campaigns bid on.
## Listings and catalog [#listings-and-catalog]
Start here: the Catalog spreadsheet's tabs, and which guide covers each job.
Every SKU of a store with its image, price, stock, status and fulfillment.
Your listing by SKU or any catalog page by ASIN — status, issues, and whether Amazon took your change.
Rank, Buy Box, offers, FBA fee and your margin for every competitor, then pick a winner.
Allowed, approval required or restricted, for many ASINs at once.
Copy from a photo, a competitor or your own listing, with length checks and translations.
Seller Central's template in a sheet: create, update and delete listings, validated first.
Match your products to existing ASINs in the Amazon catalog in bulk.
Move a listing to a brand-new ASIN while keeping your SKU and FBA inventory.
Build and publish A+ content, or revise the ASINs of existing documents.
Host product images and create image URLs for flat-file uploads.
## Orders, FBA and reports [#orders-fba-and-reports]
Sync orders automatically and refresh any single order on demand.
Generate PDF invoices for shipped orders in bulk.
Create FBA shipments with Send to Amazon and get FBA and FNSKU labels in your spreadsheet.
A live, filterable view of every FBA SKU — stock, age, sell-through and recommended actions.
Request standard Amazon reports and download them into Google Drive.
Request on-demand reports from a sheet, and query the reports SellerSheet syncs for you.
# How to Use the FBA Inventory Health Dashboard in Google Sheets (https://sellersheetai.com/guides/inventory-health-dashboard)
> See stock, inventory age, sell-through, alerts and estimated long-term storage fees for every FBA SKU in one live Google Sheets table, refreshed from your synced Amazon reports with one click.
## Introduction [#introduction]
Managing FBA inventory on Amazon means juggling several Seller Central reports — FBA Inventory Health, Stranded Inventory, Storage Fees, Restock Recommendations and more. Each is a separate download, a separate tab, a separate analysis. And there's no single view that answers "should I restock this SKU?" and "is this SKU aging into storage fees?" at the same time.
SellerSheet's **Inventory Health** dashboard puts this into one live table in your FBA workbook: one row per SKU × condition × marketplace, with stock, inventory age, sell-through, sales, Amazon's alerts and recommended action, stranded and suppressed flags, estimated excess and estimated long-term storage fees (LTSF) — plus a product thumbnail.
* Open the **FBA** panel of the sidebar and click **Refresh Data** — it opens (or creates) the **Inventory Health** sheet.
* Type your store refs in **A4** (e.g. `myStore-US`) and click **Refresh Data** again.
* Use the row-4 filters to find what to restock, what is aging, and what is stranded — the table re-queries instantly.
## Prerequisites [#prerequisites]
* **Store connected:** at least one Amazon store connected to your SellerSheet account — sign in at [sellersheetai.com](https://sellersheetai.com/home) and connect it under **Settings → Stores & Marketplaces**.
* **Reports synced:** SellerSheet syncs your FBA inventory reports on a schedule once the store is connected. The dashboard reads that synced data, so it fills once the first sync has run.
* **Sidebar installed:** the SellerSheet Google Sheets add-on installed and authorized. See [Install & first sync](/help/sheets/install) if needed.
## Workflow 1: Open the dashboard [#workflow-1-open-the-dashboard]
Several reports. Several downloads. A few pivot tables. And you still can't answer "what do I restock this week?" because your storage fees are in one file, your restock recommendations in another, and your inventory age data in a third — none of them linked.
The dashboard solves this with a single table that joins your inventory data for you.
### 1. Open the sidebar [#1-open-the-sidebar]
Open Google Sheets and launch the SellerSheet sidebar via **Extensions → SellerSheet**. Go to **Sellers → FBA** and find the **Inventory Health** section.
### 2. Click "Refresh Data" [#2-click-refresh-data]
Click **Refresh Data**. Clicked anywhere but the Inventory Health sheet, it jumps there — creating the tab in your FBA workbook if needed — so you can run it again.
### 3. Pick your stores and refresh [#3-pick-your-stores-and-refresh]
1. Type your store ref(s) in **A4**, e.g. `myStore-US` — comma-separate several. A4 is required; there is no "All".
2. Click **Refresh Data** again. SellerSheet fills the hidden data layer from the SellerSheet database (no Amazon call) and stamps **Last Sync** (L4) and **Data as of** (M4).
\[\[TODO: screenshot the Inventory Health sheet with filter row, tiles and data table]]
The live table uses the add-on's `SQL()` function, which activates after the SellerSheet sidebar has been opened once in the workbook.
### Sheet layout [#sheet-layout]
| Rows | What they hold |
| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Row 2 | Banner — its note carries the tab guide. |
| Rows 3–4 | Filter labels and inputs: **Stores**, **SKU**, **ASIN**, **Product Name**, **Condition**, **Rec. Action**, **Alert**, **Stranded**, **Suppressed**, **Min Avail**, **Max Avail**, plus the **Last Sync** and **Data as of** stamps. |
| Rows 5–8 | Summary tiles that total the filtered table: Total SKUs, Available Units, FBA Total, FBA Reserved, Unsellable, Inbound Total, Est. Excess, Est. LTSF, Units and Sales over 7 / 30 / 60 / 90 days, and units per age bucket (0–90, 91–180, 181–270, 271–365, 365+ days). |
| Row 9 | Column headers (with a column filter). |
| Row 10+ | One row per SKU × condition × marketplace. |
Text filters take several values separated by commas — a row matches ANY of them (OR); the filters combine with AND; blank means all. The table re-queries the moment you change a filter — no re-sync.
## Workflow 2: Find what to restock [#workflow-2-find-what-to-restock]
You check FBA Health — it says 14 days of supply. You check Restock Recommendations — it says nothing. You're not sure whether to order. Meanwhile, you run out of stock and lose the Buy Box for three weeks.
1. Set **Rec. Action** to `CreateShippingPlan` to see the SKUs Amazon recommends restocking.
2. Read **Available**, the inbound columns (**Inbound Working**, **Inbound Shipped**, **Receiving**), **Days of Supply** and **Weeks Cover** (30-day and 90-day) side by side.
3. Compare the **Units** and **Sales** columns over 7 / 30 / 60 / 90 days to see whether demand is growing or slowing.
4. Use **Min Avail** / **Max Avail** to narrow to low-stock SKUs.
When a SKU needs stock, create the shipment from the same workbook — see [How to Create FBA Shipments (Send to Amazon) in Google Sheets](/guides/create-sta-shipments-in-google-sheets).
## Workflow 3: Cut storage costs [#workflow-3-cut-storage-costs]
You know you're paying long-term storage fees. But you don't know which ASINs are the worst offenders until the charge already hits. And even then, you have to cross-reference the storage fee report against your inventory report to figure out which ones are worth removing — by hand.
* **Aged units:** the age tiles (rows 7–8) and the age-bucket columns show units aged 0–90, 91–180, 181–270, 271–365 and 365+ days.
* **Est. LTSF** and **Est. Excess:** the projected long-term storage fee and the estimated excess quantity per SKU, totalled in the tiles.
* **Rec. Action:** filter on `Create removal order`, `Lower price` or `NoRestockExcessActionRequired` to see what Amazon suggests for excess stock.
* **Stranded / Suppressed:** set either filter to `Only` to list the inventory that cannot sell right now, or `Exclude` to hide it.
* **Alert:** filter on `Low traffic` or `Low conversion` to find SKUs whose listing, not their stock, is the problem.
Long-term storage fees (LTSF) are projected from current aged unit counts — they're an estimate, not a billed amount yet. Amazon charges LTSF on the 15th of each month for any units that have been in FBA for more than 365 days. Use this number as a monthly "cost to hold" signal to prioritize removal or liquidation actions.
Start with the 181+ day age buckets to find aged units, then check those SKUs' **Est. LTSF** and sell-through. A SKU with both high LTSF exposure and slow sales is a removal candidate even before it hits 365 days.
## Refreshing the data [#refreshing-the-data]
| Method | Use when | Calls Amazon? |
| --------------------- | ---------------------------------------------------------------------------------- | ----------------------------------- |
| Automatic report sync | Scheduled — SellerSheet keeps your synced reports current | Yes, in the background |
| **Refresh Data** | You want the table to show the latest synced data, or you changed the stores in A4 | No (reads the SellerSheet database) |
| Change a row-4 filter | You want a different slice of the data already loaded | No |
## Maximizing efficiency [#maximizing-efficiency]
* **Filter, don't sort, with the row-9 column filter:** it is safe for filtering, but sorting with it breaks the live table. If that happens, fix it with **Reset to template**.
* **Several marketplaces at once:** put several store refs in A4 (e.g. `myStore-US, myStore-CA`) to compare the same SKU across marketplaces side by side.
* **Tiles follow your filters:** the tiles total only the rows your filters (and the row-9 column filter) leave visible.
* **Every button of the panel** is listed on [FBA](/help/sheets/sellers/fba).
# How to Manage Amazon Listings in Google Sheets (https://sellersheetai.com/guides/manage-amazon-listings-in-google-sheets)
> The SellerSheet Catalog spreadsheet puts every Amazon listing job in Google Sheets — see every SKU, audit what's live, research competitors, write copy with AI, check eligibility, and create, update or delete listings in bulk.
* One spreadsheet, the **SellerSheet Catalog**, holds a tab for each Amazon listing job. The sidebar's **Catalogs** panel has a button group for each tab.
* **Improve what you sell:** Catalog → Listing Snapshot → Listing Drafts → Publish Queue. **Launch a product:** Catalog Research → Restriction Check → Listing Drafts → Publish Queue.
* Before you publish, **Validate (Preview)** has Amazon check each row. Every result lands in the **Submission Log**.
In Seller Central you edit one listing per page, or you upload a flat file and wait for a report. This series moves the whole job into Google Sheets: a row per listing, a button per step, and Amazon's own check before you publish. Each guide follows the same made-up store, **myStore-US**, selling earbuds under **myBrand**.
## The series [#the-series]
The Catalog tab: every SKU of a store with its image, price, stock, status and fulfillment — filter it in seconds.
Listing Snapshot: your listing by SKU or any catalog page by ASIN — status, issues, and whether Amazon took your change.
Catalog Research: rank, Buy Box, offers, FBA fee and your margin for every competitor, then pick a winner.
Restriction Check: allowed, approval required or restricted, for hundreds of ASINs at once.
Listing Drafts: copy from a photo, a competitor or your own listing — with live length checks and translations.
The Publish Queue: Seller Central's template in a sheet — create, update and delete listings, validated before they go live.
## Why do it in a sheet [#why-do-it-in-a-sheet]
* **Amazon checks your rows first.** Click **Validate (Preview)**. Amazon checks each row, and the sheet shows which attribute is missing. You don't upload a file, wait and download a report.
* **Bulk, not one at a time.** One click fills every row of a tab, and one feed sends up to 25,000 rows.
* **Side by side.** Your listing next to Amazon's catalog page, your product next to its competitors, every language of a listing in one tab.
* **Your own record:** the spreadsheet lives in your Google Drive. The Submission Log keeps every validation and submission, and Backup saves a copy of the Publish Queue before a big change.
* **Share it:** your team works in the same spreadsheet, with Google Sheets' comments and version history.
## Before you start [#before-you-start]
* [Start free](https://sellersheetai.com/home) and connect your Amazon store under **Settings → Stores & Marketplaces**.
* Install the SellerSheet sidebar in Google Sheets. See [Install & first sync](/help/sheets/install).
* Open the sidebar's **Catalogs** panel. Under **Resources**, click **Catalog**. This is your **SellerSheet Catalog** spreadsheet; the sidebar made it in your Google Drive the first time you opened it.
* Each tab's buttons sit in the sidebar group of the same name. Open the tab before you click.
The sidebar's full button list is on [Catalogs](/help/sheets/sellers/catalogs).
## Prefer to ask your AI? [#prefer-to-ask-your-ai]
[SellerSheet MCP](/guides/connect-sellersheet-mcp) connects the AI assistant you already use, such as Claude or ChatGPT, to your store. It can prepare a Publish Queue template, fill the rows and validate them. You review and approve the rows in the sheet.
## Frequently asked questions [#frequently-asked-questions]
### Do I need to know Seller Central's flat files? [#do-i-need-to-know-seller-centrals-flat-files]
No, but it helps. The Publish Queue holds the same columns as Seller Central's category template, with the guide for each column on row 4 and Amazon's check before anything goes live.
### Where does my listing data live? [#where-does-my-listing-data-live]
Your spreadsheets are in your own Google Drive. The sidebar reads from and writes to Amazon through Amazon's official Selling Partner API. For the Catalog tab, SellerSheet keeps a daily copy of your Amazon All Listings report, and Sync Catalog copies it into the sheet.
### Can my AI assistant do this instead? [#can-my-ai-assistant-do-this-instead]
Yes. The same listing jobs are available over SellerSheet MCP, so an AI assistant you already use can fill and submit the Publish Queue while you review the rows in the sheet.
# How to Refurbish an Amazon Listing (New ASIN, Same SKU & FBA Inventory) in Google Sheets (https://sellersheetai.com/guides/refurbish-amazon-listing-in-google-sheets)
> Migrate an Amazon listing to a brand-new ASIN without moving inventory or relabeling — keep your SKU and FBA stock, reset the listing, all from Google Sheets.
* **Back up**: capture the listing twice in **Listing Snapshot** — your own version by SKU and Amazon's catalog version by ASIN.
* **Create**: in the **Publish Queue**, create a new ASIN under a temporary SKU with a fresh UPC (or GTIN exemption) and a partially-modified title, highlight, bullets and description — every other attribute carried over — while a DELETE row removes the old listing in the same batch.
* **Rebuild**: restore the original copy on the new ASIN, then rebuild your original SKU on it using the new ASIN as the externally_assigned_product_identifier.
* **Move stock**: a one-line support case remaps your FBA inventory. Product, warehouse stock and SKU all stay put; only the ASIN changes.
## Introduction [#introduction]
Refurbishing a listing means migrating an existing FBA product onto a **brand-new ASIN** — while keeping the SKU, the FNSKU labels, and every unit already sitting in Amazon's warehouses. Sellers do it to start a listing fresh and regain new-product momentum, without touching physical inventory.
The whole play is four moves:
1. **Before:** you have SKU1 → ASIN1 (the old listing).
2. **Create:** create a new product under a temporary SKU2 — partially modify the title, highlight, bullets and description, keep every other attribute — and Amazon assigns a fresh ASIN2.
3. **Re-home:** delete the old listing, then rebuild SKU1 pointing directly at ASIN2. From now on SKU1 → ASIN2.
4. **Move stock:** FBA units still reference ASIN1; one support case remaps them to ASIN2. Done.
Doing this in Seller Central means juggling flat files, category templates and inventory loader quirks. With SellerSheet's **Catalog spreadsheet**, the entire workflow lives in two tabs — **Listing Snapshot** (backup & verification, both your submitted version and Amazon's catalog version) and the **Publish Queue** (every create / update / delete submission).
### Variables used throughout this guide [#variables-used-throughout-this-guide]
* **SKU1**: your original SKU, the one you keep — e.g. `SKU-001`.
* **ASIN1**: the old ASIN you're leaving behind — e.g. `B0XXXXXXX1`.
* **SKU2**: a temporary SKU used to create the new ASIN — e.g. `SKU-001-08141030` (SKU1 + timestamp).
* **ASIN2**: the brand-new ASIN, your listing's new home — e.g. `B0XXXXXXX2`.
## Prerequisites [#prerequisites]
* **Store authorization:** your Amazon store connected to SellerSheet with write access — sign in at [sellersheetai.com](https://sellersheetai.com/home) and connect it under **Settings → Stores & Marketplaces**.
* **An identifier that won't collide with ASIN1:** either a **fresh, unused UPC**, or a category with **GTIN exemption** (identifier left empty).
* **The Catalog spreadsheet** with its **Listing Snapshot** and **Publish Queue** tabs (created by the SellerSheet sidebar — see [Catalogs](/help/sheets/sellers/catalogs)).
* **Variation children only:** note the parent SKU, variation theme and theme attribute values before you start — you'll restore the relationship at the end.
Amazon matches products by GTIN *before* it ever looks at your title. Submit SKU2 with ASIN1's UPC and it attaches straight back to ASIN1 — no new ASIN is ever created. This single mistake is the most common reason the whole workflow fails.
## Getting around the sidebar [#getting-around-the-sidebar]
Four habits make the whole workflow self-explanatory — the sheet documents itself:
* **The sidebar menu must match the active sheet tab.** Each section (Listing Snapshot, Publish Queue…) is sheet-specific — the sidebar even says "active tab must match". If a button seems to do nothing, check which tab is active at the bottom of your spreadsheet.
* **Hover any button** to see a tooltip explaining exactly what it does before you click.
* **Read the cell notes.** Header cells carry notes (the small corner marker) describing how the column is used, accepted values, and examples — hover to read them.
* **The Publish Queue header is the built-in manual.** For every attribute column, row 4 is a guide with a format hint and example, row 6 shows the column's display name (e.g. Externally Assigned Product Identifier), and the hidden row 5 holds the code key the server reads. Your listings start on row 7.
## Phase 1: Back up everything first [#phase-1-back-up-everything-first]
**The problem:** this workflow deletes a live listing on purpose. If anything goes sideways and you didn't capture every attribute first, you're rebuilding a listing from memory — titles, bullets, dimensions, compliance fields, all of it.
### 1a. Back up what you submitted (by SKU) [#1a-back-up-what-you-submitted-by-sku]
Open the **Listing Snapshot** tab. Enter your store (e.g. `myStore-US`) in the **Store** column and SKU1 in the **SKU** column, then click **Listing Snapshot → Fetch by SKU** in the sidebar. The row fills in — and the **JSON** column now holds a complete JSON backup of every attribute on the listing. That's your restore source. Note the **ASIN** column value: that's ASIN1.
\[\[TODO: screenshot Listing Snapshot tab with Fetch by SKU]]
### 1b. Back up what Amazon accepted (by ASIN) [#1b-back-up-what-amazon-accepted-by-asin]
On a new row of **Listing Snapshot**, enter the store and ASIN1 with the SKU cell left empty, and click **Listing Snapshot → Fetch by ASIN**. This captures Amazon's catalog-side, normalized version of your listing (what shoppers see) — useful for spotting what Amazon rewrote, and as evidence for the support case later.
\[\[TODO: screenshot Listing Snapshot tab with Fetch by ASIN]]
Fetch by SKU and Fetch by ASIN only run on rows whose **JSON** cell is empty. To fetch a SKU again later in this guide, use a new row or clear that row's JSON cell.
## Phase 2: Create the new ASIN [#phase-2-create-the-new-asin]
**The problem:** you can't just "ask Amazon for a new ASIN" — the catalog exists to prevent duplicates. Submit the same product unchanged and Amazon binds your new SKU straight to the ASIN you're trying to escape.
Here's the balance this phase walks: the new listing must carry the **old ASIN's attributes** — the Phase 4 support case depends on the two ASINs matching. But submit them 100% identical and Amazon decides the product already exists and binds SKU2 to ASIN1; differ too much and changing the copy back after creation sometimes fails. So: keep **every attribute** from the old listing, and **partially modify only four copy fields** — Item Name, Item Highlight, Bullet Point, Product Description — just enough for Amazon to treat it as a new product. Once the new ASIN is created, those four fields are changed back to the old ASIN's exact content (Phase 3, step 1).
### 1. Load the product into the Publish Queue [#1-load-the-product-into-the-publish-queue]
Switch to the **Publish Queue** tab and follow the numbered groups in the sidebar:
1. Fill **Store** and **Listing Locale** (e.g. en_US) in row 3.
2. Enter the **productType** from your Listing Snapshot backup (e.g. `HEADPHONES`) in the data row.
3. Click **Get Template** — it loads every attribute column for that category, like downloading the category's Excel template from Seller Central, but in-sheet.
4. Put SKU1 in the **sku** column and click **Fetch by SKU** — the whole row populates.
\[\[TODO: screenshot Publish Queue tab with Get Template, Fetch by SKU, Validate and Create/Replace/Del buttons (retake — the old one showed real store data)]]
The Publish Queue workflow — Template → Fill rows → Validate → Publish, all from the sidebar.
### 2. Edit the row into a "new product" (SKU2) [#2-edit-the-row-into-a-new-product-sku2]
| Column | Change to |
| ---------------------------------------------------------------------- | -------------------------------------------------- |
| sku | SKU2 — e.g. `SKU-001-08141030` (SKU1 + timestamp) |
| operationType | `UPDATE` |
| externally_assigned_product_identifier#1.value | Fresh UPC — or **empty** if GTIN-exempt |
| externally_assigned_product_identifier#1.type | `upc` — or **empty** if GTIN-exempt |
| supplier_declared_has_product_identifier_exemption | `true` if GTIN-exempt; otherwise leave empty |
| product_site_launch_date | **Clear it** if it carries the old SKU's past date |
| item_name / title_differentiation / bullet_point / product_description | **Partially modify** (see below) |
**Why does creating use `UPDATE`?** UPDATE submits the full listing: if the SKU doesn't exist it is created; if it exists it is overwritten. There is no separate "create" operation — SKU2 takes UPDATE too.
\[\[TODO: screenshot Publish Queue identifier columns: externally_assigned_product_identifier type, value and merchant_suggested_asin (retake — the old one showed real store data)]]
The three key identifier columns — type, value, and merchant_suggested_asin (used later in Phase 3).
**Modify, don't rewrite from scratch.** Touch only the four copy fields and change them just enough that duplicate detection sees a new product — restructure the title, reword the highlight and bullets, rephrase the description. Change too little and SKU2 merges back into ASIN1; go far beyond these four fields and restoring the original content later can fail. Everything else stays identical to the old listing.
If SKU1 is a **variation child**, also clear parentage_level, child_parent_sku_relationship, variation_theme and the theme attributes (e.g. color / size) — create it as a standalone product and restore the variation at the end.
\[\[TODO: screenshot Publish Queue GTIN exemption column and variation columns (retake — the old one showed real store data)]]
Scroll right for the GTIN exemption flag and the variation columns (clear these for children).
### 3. Add a DELETE row for SKU1 in the same batch [#3-add-a-delete-row-for-sku1-in-the-same-batch]
On the next empty row, enter SKU1 in the **sku** column and set **operationType** to `DELETE`. That's it — a delete row needs only those two cells. Creating SKU2 and deleting the old listing in the same batch frees SKU1 up, so you can rebuild it on the new ASIN2 in Phase 3.
\[\[TODO: screenshot Publish Queue with the SKU2 UPDATE row and the SKU1 DELETE row submitted together (retake — the old one showed real store data)]]
Two rows, one batch — SKU2 (UPDATE) creates the new product; SKU1 (DELETE) removes the old listing.
### 4. Validate, then submit [#4-validate-then-submit]
Click **Validate (Preview)** and check the **Submission Log** tab for ERROR-level issues — validation is a preview, nothing publishes (a DELETE row has no preview and is skipped). Once clean, click **Create/Replace/Del.** to submit (instant for up to 20 rows, dispatched per row's operationType; use **Submit Feed** for larger batches).
### 5. Verify ASIN2 was born [#5-verify-asin2-was-born]
Wait 10–15 minutes. In **Listing Snapshot**, fetch SKU2 and read the **ASIN** column — that's ASIN2. The critical check: **ASIN2 ≠ ASIN1**. You can cross-check in Seller Central too.
If SKU2 returns ASIN1, Amazon merged it — the four copy fields weren't different enough (or the identifier matched). Delete SKU2, increase the changes to those four fields, and resubmit.
## Phase 3: Rebuild your SKU on the new ASIN [#phase-3-rebuild-your-sku-on-the-new-asin]
**The problem:** ASIN2 exists, but it's living on a throwaway SKU with placeholder copy. Your real SKU — the one your FBA inventory, ads and operations are built around — is deleted and homeless. And if the two ASINs don't look like the same product, support will refuse to move your inventory.
### 1. Restore the original copy on SKU2 first [#1-restore-the-original-copy-on-sku2-first]
Before rebuilding SKU1, copy the **original** copy from your Phase 1 Listing Snapshot backup back onto the SKU2 row and submit with operationType `UPDATE`. The column mapping:
| Backup (display name) | Publish Queue (code key) |
| --------------------- | ------------------------ |
| Item Name | item_name |
| Item Highlight | title_differentiation |
| Bullet Point | bullet_point |
| Product Description | product_description |
The Publish Queue shows the display name on row 6; the hidden row 5 holds the code key.
**Why this matters:** it makes ASIN2's attributes identical to ASIN1's. When you open the support case in Phase 4, support can't reject the remap on the grounds that the two ASINs are different products. After submitting, fetch SKU2 in Listing Snapshot once more and confirm it still resolves to ASIN2.
**In the same submission, lock the identifier to the new ASIN** — so every later update lands on the newly created ASIN (with the identifier left empty, Amazon can sometimes spawn yet another listing):
| Column | Set to |
| ---------------------------------------------- | ------------------- |
| externally_assigned_product_identifier#1.value | **ASIN2** |
| externally_assigned_product_identifier#1.type | `asin` |
| merchant_suggested_asin | **ASIN2** |
| operationType | `UPDATE` (required) |
**Identifier and GTIN exemption are mutually exclusive**: if SKU2 was created via exemption (supplier_declared_has_product_identifier_exemption = TRUE), clear the TRUE first — it cannot coexist with externally_assigned_product_identifier.
### 2. Rebuild SKU1 pointing at ASIN2 [#2-rebuild-sku1-pointing-at-asin2]
Back in the Publish Queue:
1. The row's attributes already match SKU1 exactly and the identifier points at ASIN2 from the previous step — **just change the sku cell to SKU1**, with operationType `UPDATE`.
2. **Confirm SKU1 is fully deleted** — Fetch by SKU on SKU1 in Listing Snapshot no longer finds the SKU (the row's Image cell shows the reason). If it still resolves, wait and re-check before submitting.
3. **Validate (Preview)** → **Create/Replace/Del.**
### 3. Verify the rebuild [#3-verify-the-rebuild]
* **Listing Snapshot** — fetch SKU1: the ASIN column should now read **ASIN2**.
* **Seller Central** — Manage All Inventory shows SKU1 / ASIN2; **Fix Stranded Inventory** shows SKU1 / ASIN1. The stranded entry is *expected* — your FBA units still reference the old ASIN until Phase 4.
Amazon "successfully" accepts operations on SKUs that don't exist. Always confirm the result by fetching the SKU in Listing Snapshot or checking Seller Central — never by the feed status alone.
## Phase 4: Move the FBA inventory & clean up [#phase-4-move-the-fba-inventory--clean-up]
**The problem:** your listing lives on ASIN2, but every unit in Amazon's warehouses still references ASIN1 — stranded and unsellable. Creating removal orders and re-shipping would cost weeks and real money.
### 1. Open the support case [#1-open-the-support-case]
Go to **Seller Central → Help → Get support → Selling on Amazon → Products and inventory → Fix a product page**, and use this one-liner (swap in your own SKU1 and ASIN2):
```text
Hello team, please remap SKU: SKU-001 to ASIN: B0XXXXXXX2.
They represent the same product. Thanks!
```
If support asks for evidence, provide a Manage All Inventory screenshot and your Phase 1 Listing Snapshot backup (by ASIN) showing the two ASINs are the same product. Once processed, the stranded entry clears and your stock is sellable under ASIN2 — no relabeling, no new shipment.
### 2. Clean up [#2-clean-up]
* **Delete SKU2** — after the remap it's just a duplicate empty offer on ASIN2 that can interfere with pricing and the Buy Box. Add a DELETE row in the Publish Queue.
* **Restore the variation** (children only) — re-add parentage_level = child, child_parent_sku_relationship, variation_theme and a theme attribute value that doesn't clash with existing siblings.
* **Archive** the backup rows, the case ID and the timeline.
## Common pitfalls [#common-pitfalls]
| Pitfall | Consequence | Avoid it |
| --------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------- |
| Reusing the old UPC on SKU2 | Attaches straight back to ASIN1 — no new ASIN | Fresh UPC, or GTIN exemption with the identifier left empty |
| Modifying the copy too timidly | Duplicate detection merges SKU2 into ASIN1 | Partially modify the four copy fields; always verify ASIN2 ≠ ASIN1 |
| Rebuilding SKU1 before it's released | The SKU can re-link to its old catalog data | Confirm SKU1 is gone first; always set merchant_suggested_asin to ASIN2 |
| Trusting the feed status | The listing may not actually exist | Verify by fetching the SKU in Listing Snapshot or in Seller Central |
| Forgetting to delete SKU2 | Duplicate offer on the same ASIN | Clean up in Phase 4 after the inventory remap |
| Leaving variation attributes on a child | Creation errors, or the child re-attaches to the parent | Clear variation columns in Phase 2; restore them in Phase 4 |
## FAQ [#faq]
### Do I need to relabel or move my FBA inventory? [#do-i-need-to-relabel-or-move-my-fba-inventory]
No. FBA inventory is tied to the FNSKU, which never changes in this workflow. After you rebuild your SKU on the new ASIN, a short support case asks Amazon to remap the existing inventory — no removal orders, no relabeling, no new shipment.
### Why does the temporary SKU need a new UPC or GTIN exemption? [#why-does-the-temporary-sku-need-a-new-upc-or-gtin-exemption]
Amazon matches products by GTIN before it looks at your title. If the temporary SKU carries the old UPC, it attaches straight back to the old ASIN and no new ASIN is created. Use an unused UPC, or leave the identifier empty and set the GTIN exemption flag if your category allows it.
### My temporary SKU came back with the OLD ASIN — what went wrong? [#my-temporary-sku-came-back-with-the-old-asin--what-went-wrong]
Either the identifier matched (same UPC) or the four modified copy fields were still too similar, so Amazon's duplicate detection merged it into the existing ASIN. Delete the temporary SKU, increase the changes to those four fields, and resubmit.
### Why does Fix Stranded Inventory show my SKU with the old ASIN? [#why-does-fix-stranded-inventory-show-my-sku-with-the-old-asin]
That is expected mid-workflow. Manage All Inventory shows your SKU on the new ASIN, while the FBA units still reference the old ASIN until the support case remaps them. Once the case is processed, the stranded entry clears and the stock is sellable under the new ASIN.
### Can I refurbish a variation child? [#can-i-refurbish-a-variation-child]
Yes. Note the parent SKU, variation theme and theme attribute values first, clear the variation columns when creating the temporary SKU, and re-attach the rebuilt SKU to the parent at the end — using a theme value that does not clash with existing siblings.
### Why restore the original copy before rebuilding the SKU? [#why-restore-the-original-copy-before-rebuilding-the-sku]
The support case succeeds when the two ASINs clearly represent the same product. Restoring the original title, bullets and description makes the new ASIN's attributes identical to the old one, so support has no grounds to reject the remap as a different product.
# How to Research Amazon Competitors in Google Sheets (https://sellersheetai.com/guides/research-amazon-competitors-in-google-sheets)
> Compare competitor ASINs side by side in Google Sheets — copy, best-seller rank, Buy Box, offers, FBA fees and your margin — then pick a winner and send it to drafting and the restriction check.
* The **Catalog Research** tab compares competitor ASINs side by side: copy, best-seller rank, Buy Box, offer counts, an FBA fee estimate and your margin.
* **Discover by Keyword** finds up to 10 ASINs for a search term; **Fetch Catalog Data** fills every row. Type **Your Cost** to see **Est Margin**.
* **Listed?** shows at once which ASINs you already sell.
* **Set as Winner** puts the best one in row 4. From there, **Copy Winner to Drafts** starts the listing and **Send to Restriction Check** checks you may sell it.
[Overview](/guides/manage-amazon-listings-in-google-sheets) · 1 [All your SKUs](/guides/see-all-amazon-skus-in-google-sheets) · 2 [Live listings](/guides/fetch-live-listings-in-google-sheets) · **3 Competitor research** · 4 [Selling eligibility](/guides/check-asin-selling-eligibility-in-google-sheets) · 5 [Write listings with AI](/guides/write-amazon-listings-with-ai-in-google-sheets) · 6 [Bulk create & revise](/guides/bulk-create-revise-amazon-listings-in-google-sheets)
In this guide **myStore-US** wants to launch open-ear earbuds under **myBrand**. You find the products that already sell, see what each one would earn you, and pick the one to model your listing on. One click does for every row what Amazon's Revenue Calculator does one ASIN at a time.
## Before you start [#before-you-start]
* Connect your store at [sellersheetai.com](https://sellersheetai.com/home) and install the sidebar ([Install & first sync](/help/sheets/install)).
* In the sidebar's **Catalogs** panel, click **Catalog** under **Resources** to open the **SellerSheet Catalog** spreadsheet. Go to the **Catalog Research** tab and expand the **Catalog Research** group in the sidebar.
* The tab has two parts: **row 4 is your winner**, and competitors go from **row 5** down.
## Research a niche [#research-a-niche]
### Find the competitors [#find-the-competitors]
Type `myStore-US` in **A5** (any row from 4 down works). Click **Discover by Keyword**, type `open ear earbuds` in the box and click OK. Up to 10 ASINs that match are added below and filled. They are Amazon's first 10 catalog matches, not a best-seller list, and ASINs already on the tab are skipped — so try other search terms to add more.
You can also paste ASINs you found yourself into **column C**, from row 5, with the store in column A.
### Fetch Catalog Data [#fetch-catalog-data]
Rows from **Discover by Keyword** are already filled. Click **Fetch Catalog Data** for ASINs you pasted, or to refresh the numbers. Every row from 5 with a store and an ASIN fills from Amazon:
| Columns | What you learn |
| ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| **Image, Product Type, Brand Name, Item Name … Generic Keyword** | The competitor's listing copy, one bullet per line. |
| **BSR Category, BSR Rank** | Its Best Sellers Rank. A lower rank sells more; compare ranks only within the same BSR Category. |
| **Buy Box** | The Buy Box price for a new item. |
| **FBA Offers, MFC Offers** | How many sellers offer it new — fulfilled by Amazon, or merchant-fulfilled (MFC, the same as FBM). |
| **Fee Est** | Amazon's FBA fulfilment plus referral fee, at the Buy Box price. |
| **Listed?** | Your own SKUs on that ASIN, if you already sell it. |
### Type your cost [#type-your-cost]
Type your landed cost per unit — what one unit costs you, delivered to Amazon — in the marketplace's currency, in **Your Cost**. **Est Margin** works it out as Buy Box − Fee Est − Your Cost, and turns red when you would lose money. It leaves out ads, storage, returns and other costs.
### Set as Winner [#set-as-winner]
Click anywhere in the row you want to model, then click **Set as Winner**. The whole row is copied to **row 4**. Fetches never overwrite row 4, so edit it freely — it is your summary.
### Send it on [#send-it-on]
* **Copy Winner to Drafts:** type your own SKU in **B4** first, then click it. A row is added to [Listing Drafts](/guides/write-amazon-listings-with-ai-in-google-sheets) with the store, your SKU, the winner's ASIN, image, product type and copy. Each click adds another row.
* **Send to Restriction Check:** select the rows to check (row 4 counts too) and click it. Their store and ASIN are added to [Restriction Check](/guides/check-asin-selling-eligibility-in-google-sheets), with the marketplace's language as the Reason Locale. That tab shows whether Amazon restricts that product for you — for example a brand or category that needs approval.
When the draft reaches the Publish Queue, the winner's ASIN lands in **Merchant Suggested ASIN**. If you are launching your own product, clear that cell before you publish. Otherwise your SKU joins the competitor's listing.
## Tricks [#tricks]
* **Model a price:** row 4 recalculates its margin from its own cells. Type a different Buy Box, fee or cost in row 4 to see what a lower price would earn. Fee Est doesn't follow the Buy Box by itself, so change it too.
* **Refresh the numbers:** click **Fetch Catalog Data** again — every competitor row is fetched again. Buy Box, offers, fee and Listed? are only written when Amazon returns a value, so clear those cells first to see whether a Buy Box has gone.
* **Compare marketplaces:** put the same ASIN on two rows with different stores, such as `myStore-US` and `myStore-UK`. Each row reads its own marketplace.
* **Spot what you already sell:** **Listed?** names your SKU on an ASIN. A competitor row that is really your own product shows up at once.
* **Reasons in another language:** the rows you send to Restriction Check get the marketplace's language as their Reason Locale. Pick another locale there before you click **Get Restrictions**.
## Frequently asked questions [#frequently-asked-questions]
### Why are Fee Est and Est Margin blank? [#why-are-fee-est-and-est-margin-blank]
The fee is estimated at the Buy Box price, so an ASIN without a Buy Box gets no fee and no margin. With a fee, Est Margin appears once you type Your Cost.
### Is the fee right if I ship the product myself? [#is-the-fee-right-if-i-ship-the-product-myself]
Fee Est is Amazon's FBA fulfilment fee plus the referral fee, at the Buy Box price. If you ship it yourself, you pay the referral fee plus your own shipping instead. Type your own fee in the winner row to see that margin.
### Does Catalog Research use my Credits? [#does-catalog-research-use-my-credits]
No. These buttons read Amazon's catalog, pricing and fee data; none of them uses Credits.
### Does a second Fetch Catalog Data overwrite my rows? [#does-a-second-fetch-catalog-data-overwrite-my-rows]
It refreshes every competitor row from 5 down, but never touches row 4 (your winner) or Your Cost. Buy Box, offers, fee and Listed? are only written when Amazon returns a value, so clear those cells first if you want to see a Buy Box the ASIN has lost.
# How to See All Your Amazon SKUs in Google Sheets (https://sellersheetai.com/guides/see-all-amazon-skus-in-google-sheets)
> List every SKU of an Amazon store in Google Sheets — thumbnail, price, stock, status and fulfillment — filter it in seconds and pass SKUs on to Listing Snapshot or the Publish Queue.
* The **Catalog** tab lists every SKU of one store: thumbnail, ASIN, name, price, quantity, status, live status and fulfillment.
* Type the store in **A4** and click **Sync Catalog**. Then filter row 5 as you like — no new sync needed.
* A first win: filter **Fulfillment** to FBM and **Qty** to 0. These are the listings you can't ship today.
* Use the list as the starting point for everything else: paste its SKUs into [Listing Snapshot](/guides/fetch-live-listings-in-google-sheets) or the [Publish Queue](/guides/bulk-create-revise-amazon-listings-in-google-sheets).
[Overview](/guides/manage-amazon-listings-in-google-sheets) · **1 All your SKUs** · 2 [Live listings](/guides/fetch-live-listings-in-google-sheets) · 3 [Competitor research](/guides/research-amazon-competitors-in-google-sheets) · 4 [Selling eligibility](/guides/check-asin-selling-eligibility-in-google-sheets) · 5 [Write listings with AI](/guides/write-amazon-listings-with-ai-in-google-sheets) · 6 [Bulk create & revise](/guides/bulk-create-revise-amazon-listings-in-google-sheets)
Seller Central's inventory page shows your listings a page at a time. The Catalog tab puts the whole store in one sheet you can sort, filter and copy from. In this guide the store is **myStore-US**, selling earbuds under **myBrand**.
## Before you start [#before-you-start]
* Connect your Amazon store at [sellersheetai.com](https://sellersheetai.com/home) under **Settings → Stores & Marketplaces**. SellerSheet then syncs Amazon's All Listings report for it every day.
* Install the SellerSheet sidebar. See [Install & first sync](/help/sheets/install).
* Open the **SellerSheet Catalog** spreadsheet from the sidebar's **Catalogs** panel (under **Resources**). If another tab is open when you click **Sync Catalog**, the sidebar switches to the Catalog tab for you; type the store and click again.
## Sync the list [#sync-the-list]
### Type the store in A4 [#type-the-store-in-a4]
Type one store and marketplace, such as `myStore-US`: your store name, a dash, and the country code. Not sure of the name? Leave A4 empty and click **Sync Catalog** — the message lists your stores.
### Click Sync Catalog [#click-sync-catalog]
Click **Catalog › Sync Catalog**. The rows land from row 6, sorted by SKU. **B4 Last Sync** shows when you synced, and **C4 Data as of** shows the date of the Amazon report the rows come from.
### Read and filter [#read-and-filter]
| Column | What it shows |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Image** | The main image as a thumbnail. |
| **Store, SKU, ASIN** | One row per SKU, marketplace and condition. |
| **Product Name, Price, Qty** | As on the listing. Qty is your own stock on an FBM listing; Amazon's report doesn't carry FBA stock. |
| **Status** | The listing status from Amazon's report, such as Active. |
| **Condition** | Amazon's condition code; 11 means New. |
| **Live** | What Amazon last reported. `BUYABLE, DISCOVERABLE`: shoppers can buy and find it. `DISCOVERABLE` alone: they can find it but not buy it. Checked in the background, so it can be weeks old. |
| **Fulfillment** | **FBA** or **FBM**. |
| **Open Date** | When the listing was created. |
Use the filter buttons on row 5 to narrow the list. A filter works at once, without a new sync.
## Things to do with the list [#things-to-do-with-the-list]
* **Find the gaps:** filter **Qty** to 0 and **Fulfillment** to FBM to see what you can't ship. Or filter **Live** with **Text does not contain** `BUYABLE`, then check those SKUs on Listing Snapshot for today's status.
* **Audit them:** copy the SKUs of column C into column B of [Listing Snapshot](/guides/fetch-live-listings-in-google-sheets) from row 4, with the store in column A, and click **Fetch by SKU** to see each listing's issues.
* **Edit them in bulk:** on the [Publish Queue](/guides/bulk-create-revise-amazon-listings-in-google-sheets), type the store in **A3**, paste the SKUs in column B from row 7 and click **Fetch by SKU**. Each row fills from its live listing, ready to change only the cells you edit (`PARTIAL_UPDATE`).
* **Delete old SKUs:** paste them into the Publish Queue with `DELETE` in column C — that is all a `DELETE` row needs. A `DELETE` can't be undone, so click **Backup** first.
## Tricks [#tricks]
* **Keep your filters:** each sync rebuilds the row-5 filter and clears its settings. Save the ones you use as a filter view (**Data › Filter views › Create new filter view**); a sync leaves filter views alone.
* **Keep your notes elsewhere:** a sync rewrites everything from row 5 down, and re-sorts it. Put your own notes on another tab and look them up by SKU with `XLOOKUP`, so they never fall out of line.
* **Another marketplace:** change A4 (for example to `myStore-UK`) and sync again. The table is replaced with that marketplace's SKUs.
* **A listing you created today** appears after Amazon's next daily report.
## If the sync stops [#if-the-sync-stops]
| The message says | What to do |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| Type ONE store in A4 before syncing | A4 is empty or says All. Type one store; the message lists yours. |
| A4 accepts ONE store, but 2 were given | Keep one store in A4. |
| "…" is not a store you own or have been given access to | Check the spelling against the list in the message. |
| No … listings in the SellerSheet warehouse for this store | That marketplace's listings report isn't syncing. Check the store's report sync and marketplace on the dashboard. |
| The SellerSheet warehouse has NO listings for this store at all | Its listings report isn't syncing. Re-authorize the store, or check its report sync on the dashboard. |
| ROW CAP HIT | The store has more than 50,000 listings; the first 50,000 are shown. |
| … hit the 50,000-row query cap … the table is incomplete | A store that sells in several marketplaces can reach this with fewer listings in one marketplace. Some SKUs are missing from the tab. |
## Frequently asked questions [#frequently-asked-questions]
### Where does the Catalog tab get its data? [#where-does-the-catalog-tab-get-its-data]
From Amazon's All Listings report, which SellerSheet syncs for your store every day once the store is connected. Sync Catalog reads the newest copy SellerSheet holds — it does not ask Amazon live.
### Why is "Data as of" amber? [#why-is-data-as-of-amber]
C4 shows the date of the Amazon report the rows come from, and turns amber when it is more than a day old. A catalog that has not changed is not stored again, so the date can be a few days old while the list is still current.
### Can I see every marketplace at once? [#can-i-see-every-marketplace-at-once]
No. A4 takes one store and marketplace, such as myStore-US. To see another marketplace, change A4 and click Sync Catalog again; the table is replaced.
### Why are the Image or Live cells blank for some SKUs? [#why-are-the-image-or-live-cells-blank-for-some-skus]
Images and the live status are filled in the background, newest SKUs first, and each SKU is checked again about every 60 days. A SKU that has not been reached yet shows blank cells; sync again later.
# How to Sync Amazon Orders to Your Google Sheets (https://sellersheetai.com/guides/sync-amazon-orders-to-your-google-sheets)
> Sync your Amazon Seller Central orders into Google Sheets with the SellerSheet sidebar, keep them updated automatically, and refresh any single order on demand.
Keeping track of your Amazon orders and analyzing sales data is crucial for business growth. This guide shows you how to sync your Amazon orders to Google Sheets automatically, for better organization and analysis.
## Prerequisites [#prerequisites]
* **Store connected:** your Amazon store is connected to your SellerSheet account (sign in at [sellersheetai.com](https://sellersheetai.com/home)).
* **Sidebar installed:** the SellerSheet add-on is installed in Google Sheets. If not, follow [Install & first sync](/help/sheets/install).
## Step 1: Open the sidebar and sync orders [#step-1-open-the-sidebar-and-sync-orders]
To begin, trigger the first fetch from the SellerSheet sidebar:
1. Open your Google Sheet and launch the **SellerSheet sidebar**.
2. Go to the **Sales** panel.
3. Click **Sync Orders**.
### Syncing logic explained [#syncing-logic-explained]
* **First time:** the first Sync Orders fetches the last **30 days** of orders. This may take a few moments.
* **Automatic sync:** after that, SellerSheet keeps the sheet current by itself — about **every 2 hours**, together with the fees sync, fetching everything since the last sync.
* **Updates:** existing orders are updated when something changed (a status update, for example) since the last sync.
* **Manual sync:** click the button again at any time for an immediate refresh.
## Step 2: Access and manage your orders [#step-2-access-and-manage-your-orders]
Once synced, your order data lives in a dedicated spreadsheet:
* Open the **SellerSheet Sales** spreadsheet — from your Google Drive, or from the panel's Resources links in the sidebar.
* Go to the **Orders** sheet, where synced orders populate automatically.
\[\[TODO: screenshot Synced Orders in Google Sheets (retake — the old one showed real store data)]]
### Manual order updates [#manual-order-updates]
To update one order immediately, without waiting for the automatic sync:
1. Find the order in the **AmazonOrderId** column.
2. Click the cell containing its **AmazonOrderId**.
3. In the sidebar, click **Update Order**. SellerSheet fetches the latest information for that order from Amazon.
**Update Order** works on the **active cell**: the active row must hold a valid **Store** and **AmazonOrderId**.
You can pull orders that are not in your sheet yet. Write the **Store** and **AmazonOrderId** in an empty row, click the **AmazonOrderId** cell, and click **Update Order** to pull that order's data into the sheet.
## Bulk invoice creation [#bulk-invoice-creation]
Beyond syncing orders, you can use your order data to generate invoices for your customers.
\[\[TODO: screenshot Store Info Sheet for Invoices (retake — the old one showed real store data)]]
\[\[TODO: screenshot Invoices Sheet (retake — the old one showed real store data)]]
Fill the **Store Info** sheet once, and SellerSheet puts your branding and business details into every invoice generated from the **Invoices** sheet. For the step-by-step, see [How to Bulk Create Invoices for Amazon Customers](/guides/bulk-create-invoices-for-amazon-customers-in-google-sheets).
## Conclusion [#conclusion]
With the sync running on its own, you save the time of manual data entry and keep an up-to-date view of your Amazon business. Every button of the panel is listed on [Sales](/help/sheets/sellers/sales).
# How to Write Amazon Listings with AI in Google Sheets (https://sellersheetai.com/guides/write-amazon-listings-with-ai-in-google-sheets)
> Draft Amazon listing copy with AI in Google Sheets — from a product photo, a competitor's listing or your own — check every length, translate it for other marketplaces and send it to the Publish Queue.
* The **Listing Drafts** tab is your writing desk: one row per listing, with your notes on the left and the AI's copy on the right.
* Start a row from a competitor, a reference ASIN or your own listing. Write **Instructions** and **Draft Keywords**, click the row, then click **Image → Listing (AI)**, **Optimize Listing (AI)** or **Optimize Title (AI)**.
* Check the live character counts and translate with **Translate Listing (AI)**. Then click **Send to Publish Queue**; you publish from the Publish Queue.
[Overview](/guides/manage-amazon-listings-in-google-sheets) · 1 [All your SKUs](/guides/see-all-amazon-skus-in-google-sheets) · 2 [Live listings](/guides/fetch-live-listings-in-google-sheets) · 3 [Competitor research](/guides/research-amazon-competitors-in-google-sheets) · 4 [Selling eligibility](/guides/check-asin-selling-eligibility-in-google-sheets) · **5 Write listings with AI** · 6 [Bulk create & revise](/guides/bulk-create-revise-amazon-listings-in-google-sheets)
In a chat window you copy each field by hand, count the characters, and start again for every country. Here each listing is one row: the AI writes into the listing fields, the sheet counts the characters, one click translates for every marketplace, and the copy goes straight into the Publish Queue's columns. The AI is told to use only what your photo and Instructions say — still read every line.
In this guide **myStore-US** writes a listing for a new product, the open-ear earbuds **EB-OPEN-BLK**, and rewrites the title of an existing one, **EB-PRO-BLK**. Then it translates the new listing for Germany, France and Spain.
## Before you start [#before-you-start]
* Connect your store at [sellersheetai.com](https://sellersheetai.com/home) and install the sidebar ([Install & first sync](/help/sheets/install)).
* In the sidebar's **Catalogs** panel, click **Catalog** under **Resources** to open the **SellerSheet Catalog** spreadsheet. Go to the **Listing Drafts** tab and expand the **Listing Drafts** group in the sidebar.
* The AI buttons are billed from your **Credits** balance, and refunded if a call fails.
## The tab [#the-tab]
From row 4, one draft per row. Columns with ✎ are yours; the AI columns are written by the buttons, and you can edit them.
| Columns | What goes there |
| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Store ✎, SKU ✎, ASIN ✎** | The target store, the SKU you will list under, and a reference ASIN (a competitor's, or your own). |
| **Image** | The product photo, filled by a fetch. You can also type image URLs, separated by commas. |
| **Product Type ✎** | Amazon's product type. A fetch fills it. |
| **Instructions ✎** | What the AI must know: facts, tone, audience, what to stress. |
| **Draft Listing ✎** | Copy to start from — a competitor's or your own listing. A fetch fills it. |
| **Draft Keywords ✎** | Search terms the copy should use, separated by commas or lines. |
| **AI Item Name … AI Generic Keyword** | The AI's listing: title, highlight (the short line Amazon shows below the title), five bullets (one per line), description and backend search terms. |
| **AI PPC Keywords** | Short-, mid- and long-tail ideas for your ad campaigns. Not sent to the listing. |
| **A+ Idea, Image Idea** | An outline of 4–5 A+ modules, and a brief for seven product photos, main image first. Not sent to the listing. |
| **Item Name Chars, Highlight Chars, Bullet Chars** | Live character counts. |
| **Action ✎** | Stamped `SENT → Publish Queue row N` when you send the row. |
## Write a new listing [#write-a-new-listing]
### Start the row [#start-the-row]
The fastest start is the winner of your [competitor research](/guides/research-amazon-competitors-in-google-sheets). On **Catalog Research**, type your SKU in the winner row (row 4) and click **Copy Winner to Drafts**. A new row appears here with the store, your SKU, the competitor's ASIN, image, product type and copy.
Other ways to start:
* **Fetch by ASIN:** type the store and a reference ASIN, then click it. Every row with a store, an ASIN and an empty Image fills its image, product type and Draft Listing.
* **Type it:** fill the store, SKU and product type, and paste in **Image** a public link that opens the photo itself.
If the ASIN is a competitor's, you can clear the ASIN cell once the row is filled. The AI buttons don't use it, and **Send to Publish Queue** would copy it to the Publish Queue.
### Guide the AI [#guide-the-ai]
Write in **Instructions** what only you know: `Open-ear, 32H battery, IPX5. Sporty tone, no medical claims.` Put the search terms you want in **Draft Keywords**: `open ear earbuds, ear hook headphones`.
### Click the row, then an AI button [#click-the-row-then-an-ai-button]
Pick the button by what the row has: no copy yet, **Image → Listing (AI)**; copy in Draft Listing, **Optimize Listing (AI)**; only the title to fix, **Optimize Title (AI)**. Click any cell in the draft row (row 4 or below), then:
* **Image → Listing (AI)** writes a complete listing from the photo, the Instructions and the Draft Keywords. The AI must use every Draft Keyword. It doesn't read Draft Listing.
* **Optimize Listing (AI)** rewrites the Draft Listing — the competitor's copy, say — into your own, using the photo, Instructions and Draft Keywords.
The sidebar says **AI listing written.** The AI columns fill: title, highlight, five bullets, description, backend search terms that use Amazon's 250-byte budget, PPC keyword ideas, and the A+ and image ideas. Each click replaces that row's AI columns, including your edits. For EB-OPEN-BLK the start of it could read:
| Field | Example |
| ----------------------- | ------------------------------------------------------------------------- |
| AI Item Name | myBrand Open Ear Earbuds, Bluetooth 5.3, 32H Playtime, IPX5, Sport, Black |
| AI Item Highlight | Open-Ear Comfort, Secure Ear Hooks |
| AI Bullet Point (first) | OPEN-EAR DESIGN — hear the traffic around you while the music plays |
### Review the copy [#review-the-copy]
Read and edit the AI columns like any cell. Watch the counts:
* **Item Name Chars** turns amber over 74 — Amazon shows the Item Highlight only when the title is shorter than 75 characters — and red over 200.
* **Highlight Chars** turns amber over 125, Amazon's limit for the Item Highlight.
### Send to Publish Queue [#send-to-publish-queue]
1. On the **Publish Queue**, type the same store in **A3** and the language in **B3**. Type the product type in **D7** and click **Get Template** — only columns already on the Publish Queue receive copy. Then clear **D7**, so the next step can use that row.
2. Back on Listing Drafts, click the row and click **Send to Publish Queue**. The SKU, product type, ASIN and AI copy go into the first empty Publish Queue row, and **Action** is stamped.
3. On the Publish Queue, choose `UPDATE` in **Operation Type** for a new listing. Fill the brand, the product ID and the other required columns (their names are gold), then **Validate (Preview)**. See [Bulk create & revise](/guides/bulk-create-revise-amazon-listings-in-google-sheets).
The draft's ASIN lands in the Publish Queue's **Merchant Suggested ASIN**. If it is a competitor's, clear that cell before you validate. Left in place, it lists your SKU on the competitor's product. Fill your own **External Product ID** instead.
## Rewrite a listing you already sell [#rewrite-a-listing-you-already-sell]
1. Type the store and your SKU (**EB-PRO-BLK**) on a row and click **Fetch by SKU**. The row fills with your live copy in Draft Listing, its product type, image and ASIN.
2. Write what to change in **Instructions**, then click **Optimize Listing (AI)** for all the copy, or **Optimize Title (AI)** for the title and highlight only.
3. **Send to Publish Queue**, then choose `PARTIAL_UPDATE` on the Publish Queue: it changes only the cells you send and keeps the rest of the listing. Here the ASIN is your own, so keep it — a `PARTIAL_UPDATE` needs it.
**Optimize Title (AI)** works from the AI columns, and from Draft Listing only while the AI columns are empty. Like every AI button, it keeps the title under 75 characters so the highlight shows.
## Translate for other marketplaces [#translate-for-other-marketplaces]
1. On the **Listing Drafts · Translations** tab, add one row per language. **Store:** your store name with the target country code, such as `myStore-DE`. **SKU:** the same SKU as the draft. **Locale:** pick it from the dropdown, such as de_DE. Leave **Status** empty.
2. On **Listing Drafts**, click the draft row and click **Translate Listing (AI)**. One call translates every waiting language and marks each row `OK`. It translates the listing copy in the AI columns as it is now, your edits included.
3. To send a translation, set the Publish Queue's **A3** to `myStore-DE` and **B3 Listing Locale** to de_DE. Then click its row on the Translations tab and click **Send to Publish Queue**.
To translate a language again, clear its Status and click Translate Listing (AI) again.
## Set the lengths you want [#set-the-lengths-you-want]
In the sidebar's **Settings** tab, **AI Length Preferences** sets the longest copy the AI writes. Change a value and click **Save preferences**.
| Setting | Range | Default |
| ------------------- | -------- | ------- |
| Item Name | 45–75 | 75 |
| Item Highlight | 65–125 | 115 |
| Bullet Point (each) | 100–200 | 200 |
| Product Description | 300–1000 | 1000 |
The AI writes up to the limit, but an AI title always stays under 75 characters, so the highlight shows: at the default it aims for 65–74. Set Item Name lower for shorter titles.
## Tricks [#tricks]
* **One row per click.** The AI buttons and Send to Publish Queue work on the row you clicked, the top one if you selected several. The fetch buttons do every waiting row at once.
* **Fetch again:** a fetch runs only on rows whose **Image** is empty. Clear Image to fetch a row again — and note that a fetch overwrites Draft Listing and Product Type, so type your own changes after fetching.
* **Several photos:** type their URLs in Image, separated by commas. Image → Listing (AI) and Optimize Listing (AI) send them all.
* **Sending twice adds two rows.** Send to Publish Queue always uses a new, empty row; check **Action** to see which drafts already went.
## Frequently asked questions [#frequently-asked-questions]
### Do the AI buttons cost credits? [#do-the-ai-buttons-cost-credits]
Yes. Each click of an AI button is billed from your Credits balance, and refunded if the call fails. Translate Listing is billed per language. The fetch buttons and Send to Publish Queue are free.
### Which row does an AI button work on? [#which-row-does-an-ai-button-work-on]
The row you clicked — one row per click. If several rows are selected, the top one is used. Click a draft row, row 4 or below, before you click the button. On rows 1–3 the button stops before any credit is used.
### Why is my AI title amber? [#why-is-my-ai-title-amber]
Item Name Chars turns amber over 74 characters, because Amazon shows the Item Highlight only when the title is shorter than 75 characters. Shorten it by hand, or run Optimize Title (AI), which rewrites it under 75.
### Does Send to Publish Queue publish the listing? [#does-send-to-publish-queue-publish-the-listing]
No. It copies the SKU, product type, ASIN and AI copy into the first empty Publish Queue row. You choose the Operation Type there, add the product ID and the other required columns, validate, and publish.
# Catalog (https://sellersheetai.com/help/app/catalog)
> The Amazon and noon catalog screens, and a new noon listing.
The catalogs show the listings you already have on Amazon and on noon, each with the local SKU it is mapped to in [Products](/help/app/products). **New noon listing** creates a listing on noon from the app.
What each control changes:
| Effect | Meaning |
| -------------------------------- | -------------------------------------------------------------- |
| | Reads or opens something — changes nothing on Amazon or noon. |
| Changes SellerSheet | Saved in your SellerSheet workspace only — a mapping, a draft. |
| Live on noon | Changes your live noon listing, price or stock. |
| | Paid from your Credits balance; refunded if it fails. |
Nothing in the Amazon Catalog changes your Amazon listings.
## Amazon Catalog [#amazon-catalog]
One store's Amazon listings, from its newest listings report: Amazon's images and status, FNSKUs, image coverage and the local SKU. The report's date shows under the list (**listings report of** *date*). No store yet? **Go to Stores** connects one.
### Filters and views [#amazon-filters]
| Control | What it does | Effect |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Columns** | Shows or hides columns. | |
| **View** — **Families** · **SKUs** | One row per variation family (open it for its SKUs), or one row per SKU. 50 per page. | |
| **Store** | The store and marketplace to show. A marketplace **not activated on your plan** still shows its last report, which is no longer updated. | |
| **Status** | **Active**, **Inactive** or **Incomplete** — the listings report's own words. | |
| **Buyable** | **Yes** or **No** — whether Amazon said the listing is buyable when last checked. | |
| **Sort** | **SKU, A to Z** or **Open date, newest**. | |
| **Search SKU, ASIN or title** | At least 3 characters. | |
| **Show all** · **Family** | A family shows its first SKUs; **Show all** lists every SKU of it, and a **Family** filter appears. Clear it to go back. | |
### Refresh from Amazon [#refresh-from-amazon]
| Control | What it does | Effect |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Refresh from Amazon** | Reads the selected SKUs from Amazon now — up to 20 at a time: their issues, whether they are buyable, and when they were last updated. Nothing is stored. Needs the store's Amazon authorization and an SP grant on it (not Ads only). | |
### Columns and row actions [#amazon-rows]
Families: **Image**, **Product**, **Parent ASIN**, **SKUs**, **Buyable**, **Price**, **Image coverage** (slots and main images), **Studio** (a plan's step, e.g. Draft · Copy), **Local SKU**.
SKUs: **Image**, **Product**, **MSKU / ASIN**, **FNSKU**, **Status**, **Amazon** (**Buyable**, **Discoverable**, **Not buyable**, **Not checked**, **Not on Amazon**), **Issues** (read by Refresh from Amazon; **Not read** until then), **Price**, **Qty**, **Fulfillment** (**FBA** or **Seller (FBM)**), **Opened**, **Local SKU**.
| Control | What it does | Effect |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Suggested** → **Confirm** | Your SKU has this MSKU — confirm to map them. | Changes SellerSheet |
| **Map** | **Map to a product**: pick a **Product SKU** (search SKU, name or SPU, at least 3 characters) → **Map**. Needs write access to the store. | Changes SellerSheet |
| **Create product** | On a SKU or a family not yet mapped: opens [Add product](/help/app/products#add-product) filled from the listing — a parent with children becomes a product with variants. Nothing is saved until you save the product; its SKUs are then mapped to the listings. Needs write access to the store and the right to change products. | |
## noon Catalog [#noon-catalog]
One noon account's listings in noon's newest Catalog Export, and your noon drafts. **Refresh** reads a row's content and QC from noon now.
The owner and the admins see it, and so do members given a noon account. A member with read-only access sees the lists without the buttons that change anything.
### Filters [#noon-filters]
| Control | What it does | Effect |
| ------------------------------------ | ------------------------------------------------------------------ | ----------------------------- |
| **Columns** | Shows or hides columns. | |
| **Kind** — **Listings** · **Drafts** | Your listings on noon, or your drafts in SellerSheet. 50 per page. | |
| **Account** | The noon account and marketplace to show. | |
| **Status** | **Live** or **Not live**. | |
| **Issue** · **Family** | Listings with one of noon's reasons, or of one family. | |
| **QC** | **Approved**, **QC pending** or **Rejected**. | |
| **Mapping** | **Mapped** or **Not mapped** to a local SKU. | |
| **Search noon listings** | Partner SKU, noon SKU or title — at least 3 characters. | |
### Toolbar [#noon-toolbar]
| Control | What it does | Effect |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **New listing ▾ → Blank** | Opens [New noon listing](#new-noon-listing) for this account and marketplace. | |
| **New listing ▾ → From Amazon** *marketplace*… | **New noon listing from Amazon**: pick the **Amazon store**, find the listing by **Seller SKU** or **ASIN**, choose the **noon account and marketplace** → **Create draft**. Its category, attributes, sizes and images become a noon draft — one per colour — for you to check and submit. Free: no AI runs. | Changes SellerSheet |
| **Import from Amazon** | Pick an **Amazon store** and up to 50 **Amazon families**, and the noon account and marketplace → **Import N families**. Each family becomes noon drafts, one per colour. Free: no AI runs. It runs as a job — close the dialog and keep working; **Open drafts** when it is done. | Changes SellerSheet |
| **Refresh** | Reads content, QC and offers of the selected rows from noon now — up to 50 at a time. | |
| **Map** | One unmapped row selected: **Map to a local SKU** — search SKU, SPU or name → **Map**. | Changes SellerSheet |
| **Unmap** | Ends the links of the selected mapped rows after you confirm. Nothing changes on noon. | Changes SellerSheet |
### Listings — columns and row actions [#noon-listing-rows]
Columns: **Image**, **Partner SKU / noon SKU**, **Title**, **Family**, **Category**, **Price / sale**, **Stock FBN / XDock**, **Status**, **QC**, **Content EN / AR** (completeness), **Local SKU**, **Report date**.
| Control | What it does | Effect |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Edit** | Opens the listing in the [noon listing form](#edit-a-noon-listing). If SellerSheet does not hold the listing yet, **Refresh** it first. | |
| **Map** · **Unmap** | As in the toolbar, for this row. | Changes SellerSheet |
### Drafts — columns and row actions [#noon-drafts]
Columns: **Image**, **Draft**, **Category**, **Partner SKUs**, **Marketplace**, **Updated**, **Status**.
| Control | What it does | Effect |
| --------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Edit** (or **Open listing** once submitted) | Opens the draft in the noon listing form. | |
| **Submit** | **Create this listing on noon?** — the draft is sent to noon as a new listing; noon reviews its content before it goes live. | Live on noon |
| **Delete** | Deletes the draft after you confirm. Nothing changes on noon. | Changes SellerSheet |
## New noon listing [#new-noon-listing]
A form for a new listing on one noon account and marketplace. You need write access to a noon account.
### Where and what [#noon-step-listing]
Choose the **noon account and marketplace**, the **Brand** and noon's **Category**. The category's attributes and limits fill the form.
### Partner SKUs and attributes [#noon-step-attributes]
Add one row per size under **Partner SKUs and sizes**, then fill the category's **Attributes** — the required ones first.
### Copy and images [#noon-step-copy]
Write the English and Arabic title, bullets and description. Add images — slot 1 is the main image.
### Create [#noon-step-create]
**Create on noon**. noon fetches and reviews the images in about 15 minutes; until then it reports no image. Not ready? **Save as draft** and finish later from the Drafts list.
### Every control [#noon-form-controls]
| Control | What it does | Effect |
| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| **noon account and marketplace** | Where the listing is sold. Only accounts you can write are offered. | |
| **Brand** | The listing's brand. | |
| **Category** | noon's category — search and pick. Changing it drops the attributes the new category does not have, and says which. | |
| **Partner SKUs and sizes** — **Partner SKU** · **Size** · **Add row** · **Remove row** | One row per size; a family of sizes needs a size on every row. Each partner SKU once. | |
| **Attributes** — **Mandatory** · **Facets** · **Optional** | The category's attributes with noon's own limits. **N required left** counts what is still missing. | |
| **Listing copy** — **English** · **Arabic**: **Title**, **Bullets** (**Add bullet**), **Description** | The copy in both languages. **Copy from** *language* replaces one language's copy with the other's, after a confirm. | |
| **Generate with AI** | Writes the English and Arabic title, bullets and description, with an optional **Instruction**. On a new listing, save the draft first. | |
| **Images** — **Image URL** → **Add** · **Upload a file** · move · **Replace** · **Remove** | noon's image slots; slot 1 is the main image. Paste an https\:// link or upload a file. On an existing listing, noon keeps the images it holds until another image replaces them — only an image added here can be removed. | |
| **Save as draft** | Saves the form as a draft in SellerSheet; find it under **Kind → Drafts**. | Changes SellerSheet |
| **Create on noon** | Creates the listing on noon. It waits until a category is picked, at least one partner SKU is added, and no field noon would refuse (in red) is left. | Live on noon |
| **Open the listing** · **Update this listing instead** | When a partner SKU already exists on noon: open that listing, or replace it with this form's content after a confirm — noon reviews it again. | Live on noon |
Editing the form changes nothing until you save, create or update.
### Edit a noon listing [#edit-a-noon-listing]
**Edit** on a listing or a draft opens the same form.
| Control | What it does | Effect |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| **Save draft** | A draft: saves your changes. | Changes SellerSheet |
| **Submit to noon** | A draft: creates the listing on noon. A submitted draft is kept as it was sent — edit its listing instead. | Live on noon |
| **Generate with AI** | A draft: writes the copy and saves it in the draft. A listing: writes the copy from the listing's content on noon — review it, then save to noon. | |
| **Save to noon** | A listing: replaces its content on noon with this form's; noon reviews it again. Partner SKUs cannot be changed here. | Live on noon |
| **On noon → Refresh** | A listing: reads completeness, QC, noon's errors and its image review from noon now. | |
| **Price** — **Partner SKU to price and stock**, **Price**, **MSRP**, **Offer on** *country* (**Not changed**, **Active**, **Not active**) → **Save prices** | Sets the price per country; an empty cell is not changed. | Live on noon |
| **Stock** — **Warehouse**, **Quantity**, **Processing time (days)** → **Set stock** | Sets the stock of one partner SKU in one warehouse. | Live on noon |
A listing noon made itself cannot be read from noon, so its form is read-only.
## Related [#related]
* [Products](/help/app/products) — your local SKUs, and creating a product from a listing.
* [How to Connect noon to SellerSheet](/guides/connect-noon-to-sellersheet) — before the noon Catalog shows anything.
* [Selling on noon](/docs/mcp-api/workflows/noon) — the same noon work with your AI.
* [View & search listings](/docs/mcp-api/workflows/listings-view) — Amazon listings with your AI.
* [noon Listings panel](/help/sheets/noon/listings) — noon listings, pricing and stock in the Google Sheets sidebar.
* [How to Fetch Live Amazon Listings in Google Sheets](/guides/fetch-live-listings-in-google-sheets) — Amazon listings in a sheet.
## Stuck? [#stuck]
* An error message in the app: [Web app troubleshooting](/help/troubleshooting/app).
* Still stuck: [Contact support](/help/contact).
# Home (https://sellersheetai.com/help/app/home)
> The Home screen of the SellerSheet app.
Home is the first screen after you sign in: a setup guide until your workspace is ready, then your plan, stores, Credits, invitations and this month's usage at a glance.
## Main steps — get your workspace ready [#main-steps]
The **Setup guide** walks you through four steps, about 5 minutes in all. A member — not the owner or an admin — sees steps 3 and 4 only, because the owner connects the stores. So does someone whose own workspace is empty while they are invited to, or belong to, another one.
1. **Connect your Amazon store** — Seller or Vendor Central, your region and marketplaces, a short store name. Amazon then asks you to confirm. [Step 1](#step-1-connect-your-amazon-store)
2. **Connect Amazon Ads** — lets SellerSheet read campaigns and reports. Skip it if you don't run ads. [Step 2](#step-2-connect-amazon-ads)
3. **Install the sidebar & share folder** — the Google Sheets add-on, your SellerSheet folder in Drive, and a connection check. [Step 3](#step-3-install-the-sidebar--share-folder)
4. **Connect your AI client** — Claude, Claude Code, Codex or ChatGPT. You sign in; there is no key to copy. [Step 4](#step-4-connect-your-ai-client)
Each step shows **Done**, **Now**, **Up next** or **Skipped**. Step 4 ticks itself when your AI client makes its first call.
## Every control [#controls]
What each control changes:
| Effect | Meaning |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| | Reads or opens something — changes nothing. |
| Changes SellerSheet | Saved in your SellerSheet workspace only — nothing is sent to Amazon or noon. |
| Changes Amazon access · Changes noon access | Sends you to Amazon's or noon's sign-in to authorize SellerSheet — your listings stay as they are. |
Nothing on Home changes your Amazon or noon listings, and nothing on it uses Credits.
### Header [#header]
| Control | What it does | Effect |
| -------------------- | --------------------------------------------------------------------------------- | ----------------------------- |
| **Show setup guide** | Brings the setup guide back after you hid it. Shown whenever the guide is hidden. | |
When you arrive from connecting a store, a one-time sentence at the top says how it went.
### Invitations [#invitations]
Shown first when another workspace has invited you.
| Control | What it does | Effect |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------- |
| **Accept** | Opens **Join** *workspace*. Optionally give each shared store **Your name for it (optional)** — only you see it. Confirm to join and reach the stores they shared. | Changes SellerSheet |
| **Decline** | Asks you to confirm, then declines. They would have to invite you again. | Changes SellerSheet |
### Setup guide [#setup-guide]
| Control | What it does | Effect |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ----------------------------- |
| **Hide** | Hides the guide in this browser. When every step is done, the guide starts hidden. | |
| Step chips **1 · Connect store** … **4 · Connect AI client** | Open that step beside the walkthrough video. **Progress N of M complete** counts the done steps. | |
### Step 1 · Connect your Amazon store [#step-1-connect-your-amazon-store]
The store's name becomes its ref everywhere — in the sidebar and with your AI — for example `myStore-US`. Only the owner or an admin can connect a store.
| Control | What it does | Effect |
| ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- |
| **Add a store** | Opens the Add Amazon Store dialog: Seller or Vendor Central, region, marketplaces, a store name. Amazon then asks you to confirm, and you come back to Home. The dialog is described on [Stores & Marketplaces](/help/app/settings/stores). | Changes Amazon access |
| **Selling on noon? Connect noon instead** | Opens the dialog to connect a noon account instead. | Changes noon access |
### Step 2 · Connect Amazon Ads [#step-2-connect-amazon-ads]
Unlocks after step 1. Only the owner or an admin can authorize Ads. A workspace that sells on noon only has nothing to connect here.
| Control | What it does | Effect |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Store** | The store to authorize Ads for. | |
| **Authorize Ads** | Opens Amazon. You pick the advertising account, then you are back here. | Changes Amazon access |
| **I don't run ads — skip** | Marks the step skipped for you. You can authorize Ads any time on [Stores & Marketplaces](/help/app/settings/stores). | Changes SellerSheet |
### Step 3 · Install the sidebar & share folder [#step-3-install-the-sidebar--share-folder]
| Control | What it does | Effect |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Install add-on** | Opens the SellerSheet add-on on Google Workspace Marketplace in a new tab. Then open any Google Sheet and choose **Extensions → SellerSheet → Open Sidebar**; the sidebar creates your SellerSheet folder in Drive. | |
| **New Google Sheet** | Opens a new, empty Google Sheet in a new tab. | |
| **Automation address** | Copies `automation@sellersheetai.com`. In Drive, share your SellerSheet folder with it as **Editor**, so reports and your AI can write to your sheets. | |
| **Verify connection** | Checks that the sidebar saved your folder and that the automation address can open it. The answer appears under the button. | |
### Step 4 · Connect your AI client [#step-4-connect-your-ai-client]
| Control | What it does | Effect |
| ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Claude** · **Claude Code** · **Codex** · **ChatGPT** | Show the steps for that client: add the SellerSheet plugin (or, for ChatGPT, copy your **MCP URL**), then sign in with OAuth. | |
| Copy fields — **Plugin repository**, **Commands**, **Sign-in command**, **MCP URL** | Copy the text to paste into your client. | |
| **Test the connection** | Shows a first prompt to send: "Show me my Amazon Seller Central sales for the last 7 days." The step ticks itself on your client's first call. | |
| **Create an API key** | Opens **Settings → API & MCP**, for a script or another client (Cursor, Gemini, VS Code…). See [Keys & store access](/docs/mcp-api/keys). | |
| **Full MCP setup docs** | Opens the MCP setup documentation. | |
The sign-in reaches every workspace you belong to — your own stores and the ones shared with you. No API key is needed. Step-by-step for each client: [Connect an AI client](/docs/start/clients).
### Plan, Stores, Credits and Shared with me [#cards]
| Card | What it shows | Its link |
| ------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ |
| **Plan** | Your plan's name and status — **Active**, **Expired** or **No subscription** — and when it ends. | — |
| **Stores** | How many **Amazon stores** and **noon accounts** the workspace has. | **Stores & Marketplaces** → [Stores & Marketplaces](/help/app/settings/stores) |
| **Credits** | Your Credits balance and the **Model route** your AI actions run on. | **Billing & Credits** → [Billing & Credits](/help/app/settings/billing) |
| **Shared with me** | How many invitations wait for you, or **No invitations**. | **Review invitations** jumps to [Invitations](#invitations). |
All four only read. If the setup guide and usage cannot load, the cards still show and Home says **Your setup guide and usage could not load**.
### Usage [#usage]
This organization's plan, this month:
| Meter | What it counts |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **Orders this month** | Orders against your plan's cap, marked **Within plan**, **Near the cap** or **Over the cap**, with the date it resets. |
| **Amazon stores** | Connected Amazon stores against the cap. |
| **Team seats** | Seats in use, pending invitations included. |
| **Marketplaces (Amazon and noon)** | Synced marketplaces of Amazon stores and noon accounts on one cap. |
A bar turns amber from 80% of its cap and red at the cap. **no cap** means the plan does not limit it. The caps of each plan are on [Plans and prices](/#pricing).
### Learn [#learn]
| Control | What it does | Effect |
| ----------------- | ------------------------------------------------------------------------------ | ----------------------------- |
| **Skills** | Opens the skills — ready-made AI workflows for Amazon and noon — in a new tab. | |
| **Documentation** | Opens the guides for the Sheets add-on, MCP and the API in a new tab. | |
## Related [#related]
* [Quick start](/docs/start/quickstart) — account, store, AI client and first request.
* [Connect your store](/docs/start/connect) — Amazon, Ads and noon, and the marketplaces that sync.
* [Connect an AI client](/docs/start/clients) — every client, step by step.
* [Install & first sync](/help/sheets/install) — the Google Sheets sidebar.
* [Keys & store access](/docs/mcp-api/keys) — MCP keys and API keys.
* [Billing & Credits](/help/app/settings/billing) — what uses Credits, and the plan's limits.
## Stuck? [#stuck]
* An error message in the app: [Web app troubleshooting](/help/troubleshooting/app).
* Still stuck: [Contact support](/help/contact).
# Tour of the app (https://sellersheetai.com/help/app)
> What the SellerSheet web app is for, beside your AI client and the Google Sheets sidebar.
The SellerSheet web app is where you connect your stores, run your team and billing, keep your own product library, and make listing content in Studio. Sign in at [sellersheetai.com/home](https://sellersheetai.com/home).
## The screens [#screens]
In the order of the left menu. Each name opens its help page.
| Screen | What it is for |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Home](/help/app/home) | The setup guide until your workspace is ready; then your plan, stores, Credits, invitations and this month's usage. |
| [Products](/help/app/products) | Your own product library — SPU, SKUs, variants, sizes, costs, images — and the Amazon and noon listing each SKU is mapped to. |
| [Amazon Catalog](/help/app/catalog#amazon-catalog) | One store's Amazon listings from its newest listings report, with status, image coverage and the local SKU. |
| [noon Catalog](/help/app/catalog#noon-catalog) | One noon account's listings from noon's newest Catalog Export, and your noon drafts. Shown to the owner, the admins and members given a noon account. |
| [New noon listing](/help/app/catalog#new-noon-listing) | A form for a new noon listing: category, attributes, English and Arabic copy, images. |
| [Studio](/help/app/studio) | One plan per product: buyer insights, listing copy, images and A+, then publish to Amazon or noon. |
| [Image Library](/help/app/studio#image-library) | Every image made in Studio, your own gallery and the reference gallery. |
| Settings → [Organization](/help/app/settings/organization) | The workspace's name and address, its owner, plan and seats; transfer ownership or leave. |
| Settings → [Stores & Marketplaces](/help/app/settings/stores) | Connect Amazon, Amazon Ads and noon; choose the marketplaces that sync. |
| Settings → [Members](/help/app/settings/members) | Invite teammates and set what each one may see and change on each store. |
| Settings → [API & MCP](/docs/mcp-api/keys) | The keys your AI clients and your own code use. |
| Settings → [Webhooks](/help/app/settings/webhooks) | Amazon's notifications about your stores, delivered to your team chat or your own system. Owner and admins. |
| Settings → [Billing & Credits](/help/app/settings/billing) | Plan, Credits, the model route, invoices and the Credits ledger. |
| Settings → [Affiliate](/help/app/settings/affiliate) | Your partner codes, statement and payout. Shown to partners. |
## Around every screen [#around-every-screen]
* **Tabs** — every page you open becomes a tab at the top. Pin the ones you keep coming back to.
* **Search…** — bottom left of the menu, or ⌘K (Ctrl+K on Windows): jump to a page, a product, a store or an action.
* **Appearance** — light or dark, notifications, and the language switch EN | 中.
* **Your profile card** — its menu switches between the **Organizations** you belong to, has **Create organization** (a new workspace with its own stores, members, plan and Credits), and **Log out everywhere** (signs you out on every device).
## When to use which [#when-to-use-which]
One set of tools sits behind all three. Pick by the job.
| You want to… | Use | Why |
| ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ask a question, analyse, or run a job of many steps | **Your AI** over MCP — Claude, ChatGPT, Cursor or any MCP client | Your own AI calls SellerSheet's tools on Amazon's official APIs and reports back. It can change a store only where you gave it [write access](/docs/mcp-api/control). [Get started →](/docs/start) |
| Edit many rows at once and keep the record in a spreadsheet | **Google Sheets sidebar** | Each button is one step of a workflow — FBA shipments, ads, store reports, the Publish Queue — on template sheets in your own Drive. [How the sidebar works →](/help/sheets) |
| Set up and run the workspace | **Web app** | Stores, members, keys, webhooks, plan and Credits are managed here. |
| Keep one product library, make a listing's copy and images step by step, browse a catalog | **Web app** | Products, Studio and the catalogs are screens of the app. Your AI can make listing images too, with the [AI image tools](/docs/mcp-api/workflows/images). |
## Stuck? [#stuck]
* An error message in the app: [Web app troubleshooting](/help/troubleshooting/app).
* Still stuck: [Contact support](/help/contact).
# Products (https://sellersheetai.com/help/app/products)
> The Products screen: your product library, new products and variants.
Products is your own product library in SellerSheet: one row per SKU, with the Amazon and noon listings each SKU is mapped to. A product (SPU) is a single item with one SKU, or a product with variants — one SKU per colour or size.
The menu has three entries: **Product list**, **Variants list** and **Add product**. Opening a product shows its [product page](#product-page).
**Who can change products:** the owner, an admin, or a member with write access to one of the workspace's stores or noon accounts. Everyone else can read them. Mapping a listing needs write access to that listing's store.
## Main steps — add a product with variants [#main-steps]
### Choose the kind [#step-kind]
**Add product ▾ → Product with variants**.
### Basic info [#step-basic-info]
Fill in at least the **SPU** and the **Name**, then **Next**. The SPU must be unique in your workspace.
### Attributes [#step-attributes]
Tick the values the product comes in — for example colour Red and Blue, size S and M. Each combination becomes one SKU. Missing a value? Add it under the attribute; it stays in your library. Then **Make N SKUs**.
### SKUs [#step-skus]
Check the SKU codes and names, fill in costs, sizes and weights — **Apply to all** copies a number to every row — and set the **Cost currency**. Then **Save product with N SKUs**.
### Map the listings [#step-map]
The product page opens. Use **Map ▾** to link each SKU to its Amazon or noon listing, or confirm the suggestions SellerSheet found.
Already selling the product? Start from its listing instead: **Create product** on the [Amazon Catalog](/help/app/catalog#amazon-catalog) fills the form from the listing and maps each SKU to it.
## Every control [#controls]
What each control changes:
| Effect | Meaning |
| ----------------------------- | ----------------------------------------------------------------------------- |
| | Reads or opens something — changes nothing. |
| Changes SellerSheet | Saved in your SellerSheet workspace only — nothing is sent to Amazon or noon. |
Nothing on Products changes your Amazon or noon listings, and nothing on it uses Credits.
### Product list — filters [#list-filters]
**Product list** shows one row per SKU, 50 per page.
| Control | What it does | Effect |
| ------------------------ | --------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Columns** | Shows or hides columns. | |
| **Kind** | **All**, **Single** or **With variants**. | |
| **Category** · **Brand** | Your own categories and brands. | |
| **Status** | **Draft**, **On sale** or **Off sale**. | |
| **Amazon** · **noon** | **Mapped** or **Not mapped** on that channel. | |
| **Updated** | **In the last 7 / 30 / 90 days**. | |
| **Search products** | Search SKU, ASIN, Z-SKU or name — at least 3 characters — or paste whole SKUs, up to 200 at a time. | |
| **Clear filters** | Removes every filter. | |
### Product list — toolbar [#list-toolbar]
Shown to people who can change products. Tick rows to act on them; the count at the right becomes **N selected · Clear selection**.
| Control | What it does | Effect |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Add product ▾** | **Single product** or **Product with variants** — opens [Add product](#add-product). | |
| **Edit** | For the selected SKUs: set the **SKU status**, **Add a tag to their products** or **Remove a tag from their products**. Only what you set changes. Above 200 SKUs it runs as a job — make one change at a time. | Changes SellerSheet |
| **Sync images** | Copies each selected SKU's Amazon images — the main image and the gallery — into its own images. An image it already holds is skipped. Up to 50 SKUs per sync; only SKUs mapped to an Amazon listing. Runs as a job and shows synced, skipped and failed per SKU, with **Sync again**. | Changes SellerSheet |
| **Tags ▾** | **Add tag** or **Remove tag** on the products of the selected SKUs. | Changes SellerSheet |
| **More ▾ → Confirm all suggestions** | Confirms every suggested Amazon mapping on the stores you may map on, as a job. | Changes SellerSheet |
| **Delete** | Deletes the selected SKUs after you confirm. A SKU still mapped to a listing is kept — unmap it first. Deleted codes stay reserved. | Changes SellerSheet |
### Product list — columns and row actions [#list-rows]
Columns: **Image**, **Local SKU / SPU**, **Name / category**, **Amazon MSKU / ASIN**, **noon Partner SKU / Z-SKU**, **Variant**, **Cost**, **Supplier**, **Updated**. A **Suggested** mapping — your SKU code matches a listing's SKU — shows with **Confirm**.
| Control | What it does | Effect |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Confirm** | Confirms the suggested mapping. | Changes SellerSheet |
| **Edit** (or **Open**) | Opens the [product page](#product-page) — on **Basic info** if you can edit, read-only otherwise. | |
| **Studio** | Opens the product's [Studio](/help/app/studio) plan. With no plan yet, it starts one that reads the product's first listing; a product listed nowhere opens **New plan** to choose a store. | Changes SellerSheet |
| **Map ▾** | **Map an existing listing…** (see below), **Confirm on** *store*, **Unmap from** *store*. Unmap asks first; the old link stays in the product's activity. | Changes SellerSheet |
| **⋯ → Duplicate** | Copies the product with its SKUs and images as a draft under a new SPU you name. Listings are not copied. | Changes SellerSheet |
| **⋯ → Delete product** / **Delete SKU** | Deletes after you confirm. The codes stay reserved. | Changes SellerSheet |
### Map an existing listing [#map-an-existing-listing]
Links a SKU to a listing you already have.
| Control | What it does | Effect |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Store and marketplace** | The store (or noon account) and marketplace the listing is on. Only stores you have write access to are listed. | |
| **SKU** | Your SKU to map, when the product has several. | |
| **Listing** | Amazon: search the store's listings by MSKU, ASIN or title — at least 3 characters. They come from the store's latest listings report, or from Amazon live until that report has run. noon: search partner SKU, noon SKU or title in noon's newest Catalog Export. A listing mapped to another SKU cannot be picked. | |
| **Map** | Saves the link. | Changes SellerSheet |
### Add product [#add-product]
**Add product** in the menu first asks **What are you adding?** — **Single product** (one item, one SKU — e.g. a mug) or **Product with variants** (one product in several colours or sizes — one SKU each). A single product keeps one SKU; a product with variants can get more SKUs later.
Started from an Amazon listing? A banner says **From the Amazon listing on** *store*: the SKUs are created mapped to that listing. Its images stay on Amazon — add your own here.
### Single product [#single-product]
One page of cards, then **Save product**. Fields marked \* are required.
| Card | Fields |
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Basic info** | **SPU** \*, **Name** \*, **SKU code** (the SPU until you change it; unique in your workspace), **Brand**, **Category** (your own path, e.g. Home > Bath > Towels), **Product status**, **Tags** (comma-separated), **Amazon product type**, **noon category code**, **Notes** |
| **Specs & logistics** | **Item**, **Package** and **Carton** — length, width, height, weight, **Pieces per package**, **Pcs per carton** — in cm or in, g or kg; **Identifiers**: **GTIN / EAN / UPC**, **HS code**, **Country of origin** (two letters, e.g. CN) |
| **Sourcing** | **Cost**, **Cost currency** (three letters, e.g. CNY), **Supplier**, **Supplier link**, **Minimum order (MOQ)** |
| **Images** | PNG, JPEG or WebP, uploaded when you save |
| Control | What it does | Effect |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Cancel** | Back to the list; nothing is saved. | |
| **Save product** | Creates the product and its SKU, then uploads the images. If an image fails, the product is still saved and the message names the image. | Changes SellerSheet |
### Product with variants [#product-with-variants]
Three steps: **Basic info** → **Attributes** → **SKUs**.
| Control | What it does | Effect |
| ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Basic info** → **Next** | The same fields as a single product's Basic info. The SKUs are made from the SPU and the values you tick next. | |
| Attribute values | Tick the values this product comes in — one SKU per combination. | |
| **New value** → **Add value** | Adds a value to an attribute in your library. | Changes SellerSheet |
| **New attribute** + **Its first value** → **Add attribute** | Adds an attribute (e.g. colour) to your library. | Changes SellerSheet |
| **Make N SKUs** | Builds one row per combination. | |
| **Cost currency** | The currency of every row's cost (three letters). | |
| SKU grid | **SKU code**, **Name**, **Variant**, cost, item, package and carton sizes and weights. Edit any cell. | |
| **Add row** · **Remove row** · **Apply to all** | Add or remove a SKU row; copy a number from one row to every row. | |
| **Back** | Back one step; your entries stay. | |
| **Save product with N SKUs** | Creates the product and its SKUs, then opens its product page. | Changes SellerSheet |
From an Amazon parent listing, the SKUs come from its children — each mapped to its listing, unless another SKU already holds it — and the Attributes step is skipped.
### Variants list [#variants-list]
One row per product (SPU), 50 per page. Open a row to see its SKUs.
| Control | What it does | Effect |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Columns** | Shows or hides columns. | |
| **Search products** | Search SPU, SKU or name — at least 3 characters. | |
| **Add product ▾** | As on the Product list. | |
| Row | **Image**, **SPU / name**, **Kind**, **SKUs**, **Mapped on Amazon** and **Mapped on noon** (e.g. 2 of 3). Open it for each SKU's name, variant, listings, cost and update date. | |
| **Edit** (or **Open**) | Opens the product page. | |
| **Delete** | Deletes the product and its SKUs after you confirm. The codes stay reserved. | Changes SellerSheet |
### Product page [#product-page]
The header names the product — SPU, name, status, SKU count, its Amazon and noon badges and the size range across its SKUs.
| Control | What it does | Effect |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------------- |
| **Open in Studio** | As **Studio** on the list: opens or starts the product's plan. | Changes SellerSheet |
| **Add listing ▾ → Map an existing listing…** | Opens [Map an existing listing](#map-an-existing-listing). **Create a listing** is not available here yet. | Changes SellerSheet |
| **Map ▾** | **Map on** *store*, or confirm a suggestion on *store*. | Changes SellerSheet |
The tabs:
| Tab | What you do there | Effect |
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- |
| **Overview** | Channel listings, product details, the SKUs, offers and activity on one page. | |
| **Basic info** | Edit the product's fields. **Save** keeps only what you changed; **Undo changes** drops your edits. | Changes SellerSheet |
| **Specs & logistics** | Sizes and weights of the item, package and carton, one row per SKU. **Save**. | Changes SellerSheet |
| **Sourcing** | Cost, currency, supplier and MOQ, one row per SKU. **Save**. | Changes SellerSheet |
| **Images** | Images of the whole product or of one SKU. PNG, JPEG or WebP, up to 15 MB each. Drag to reorder; the first is the main image. Remove asks first. | Changes SellerSheet |
| **Channel listings** | Every marketplace the product is listed on, and the suggestions to confirm. Per row: **Edit** (a noon listing opens its form; editing an Amazon listing here comes later), **Refresh** (reads a noon listing from noon now), **Unmap**, **Confirm**. **Confirm all suggestions** confirms them all as a job. | Changes SellerSheet |
| **Channel listings → Create on noon ▾** | **From Amazon** *store* (*SKU*)…, **From Amazon…** or **Blank** — makes a noon draft from this product; see [New noon listing](/help/app/catalog#new-noon-listing). | Changes SellerSheet |
| **Offers** | Price, stock and status of each mapped listing in its channel's newest data — Amazon: the store's newest listings report; noon: the newest Catalog Export. | |
| **Activity** | **Created**, **Updated**, **Mapped**, **Unmapped**. | |
## Related [#related]
* [Catalog](/help/app/catalog) — your Amazon and noon listings, and creating a product from one.
* [Studio](/help/app/studio) — copy, images and A+ for a product.
* [Connect your store](/docs/start/connect) — the stores and marketplaces products map to.
* [Stay in control](/docs/mcp-api/control) — who gets write access to which store.
* [How to Bulk Create & Revise Amazon Listings in Google Sheets](/guides/bulk-create-revise-amazon-listings-in-google-sheets) — listings in bulk, from the sidebar.
## Stuck? [#stuck]
* An error message in the app: [Web app troubleshooting](/help/troubleshooting/app).
* Still stuck: [Contact support](/help/contact).
# Affiliate (https://sellersheetai.com/help/app/settings/affiliate)
> For SellerSheet partners: accept the terms, share your codes and links, follow your earnings and set where they are paid.
**Settings → Affiliate** is a partner's statement: the people your codes brought, what you earned, your codes and their links, and where your earnings are paid. It belongs to you as a person, not to an organization. Only partners have it: until SellerSheet sets your account up as a partner, Settings shows no **Affiliate** item, and its address shows **Page not found**.
## How the program works [#how-it-works]
* SellerSheet creates your partner codes. Each code may give the people who use it a discount.
* Your link is the SellerSheet site with your code in it. The users attributed to you are counted under **Users you brought**.
* When they pay, you earn a share of what they pay, for a number of months. Your share and the months are on the **Your codes** card.
* Earnings are counted in US dollars; other currencies are shown apart, never added together.
This is not **Refer a friend** on [Billing & Credits](/help/app/settings/billing#referral), which every user has and which rewards both sides with credits.
## Main steps [#main-steps]
**Accept the partner terms.** Until you do, the screen shows the terms only.
**Share your link.** **Copy** next to a code's **Link**.
**Add your payout details** under **Payout**, so you can be paid.
## At the top of the page [#header]
Your partner type next to the title: **Creator**, **Aggregator**, **Internal** or **Partner**.
## Partner terms [#terms]
Shown until you accept them: *Accept the terms to see your codes, your statement and your payout details.*
### Accept the terms [#accept-terms]
Records that you accepted the partner terms, then shows the statement.
Who: **the partner** · Effect: **changes settings** (you accept an agreement)
## Your statement [#statement]
| Figure | What it counts |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **Users you brought** | Users attributed to you. |
| **Users who earned you commission** | Of those, the users whose payments earned you commission. |
| **Earned (USD)** | Your commission in US dollars. Earnings in other currencies are listed below it, apart. Clawed-back commission is not counted. |
## Your codes [#codes]
The line under the title says your share and for how many months. Each code shows:
* the code, **Active** or **Inactive**;
* its discount, as a percent off, when it gives one, with an example of the discounted plan price;
* **Link**: your link with the code in it.
When you have none, the card says *No code yet — your partner manager creates them.*
### Copy [#copy]
Copies the code's link. It says **Copied** when it worked.
Who: **the partner** · Effect: changes nothing
## Payout [#payout]
Where your earnings are paid. The line under the title shows the details on record, masked, and the date they were set; or *No payout details yet — add them to get paid.*
* **Method**: **PayPal**, **Wise**, **支付宝** (Alipay) or **微信** (WeChat).
* **Identifier**: what kind of account ID you give. PayPal and Wise take an e-mail address; 支付宝 an e-mail address, a mobile number or an account ID; 微信 a mobile number or an account ID.
* **Account**: the address, number or ID itself — never a bank card number.
* **Account holder's name**.
### Save [#save-payout]
Saves the payout details. They are stored encrypted, and only masked versions are ever shown. **At most 10 changes an hour.**
After any change, an e-mail goes to your partner contact address, and payouts are held for 7 days. If you did not make the change, reply to that e-mail at once.
Who: **the partner** · Effect: **changes settings**
## Related [#related]
* [Billing & Credits](/help/app/settings/billing#referral): **Refer a friend**, the credit reward every user has.
## Stuck? [#stuck]
* [Web app errors](/help/troubleshooting/app): what each error means and the fix.
* [Contact support](/help/contact)
# Billing & Credits (https://sellersheetai.com/help/app/settings/billing)
> AI actions — images, listing copy, buyer insights — are paid from one Credits balance, priced before they run and refunded when they fail. Plan limits say how fast and how much.
## The Billing screen [#the-billing-screen]
**Settings → Billing & Credits** holds your organization's plan, its Credits balance and model route, its team seats, and your own referral link. Everyone in the organization can open it. Only the owner changes the plan and the seats. The owner and admins top up Credits, switch the model route and read the invoices and the ledger. A member sees the plan, the balance and the seats, read-only, and has their own referral link.
The prices themselves are on the screen and on [Plans and prices](/#pricing); this page does not repeat them. Payments run through Stripe. A control marked **costs money** charges the card on file, or takes you to Stripe to pay.
### At the top [#billing-header]
* The plan's name and *You are … of this organization.*
* **Invoices** opens [Invoices](#invoices). Owner and admins only.
* After you pay on Stripe, a banner says *Payment received — your plan updates within a minute.* or *Purchase received — your credits are added within a minute.*
### Plan [#plan]
The card shows **Plan name**, **Status** (**Active**, **Expired** or **No subscription**), **Billing cycle** (**Monthly** or **Annual**) and **Renews**, or **Ends** once the plan is cancelled. A scheduled change reads *Changes to … on …*. Below are the plans, one card each: its price, what it includes, and **Current plan** on yours. A member reads *Only the organization's owner manages the subscription.*
#### Payment details [#payment-details]
On a paid plan. Takes you to Stripe's payment portal for this organization.
Who: **owner** · Effect: changes nothing here
#### Cancel plan [#cancel-plan]
On a paid plan that is not already ending. Asks first: the plan stays active until its end date, then the organization moves to the Free plan.
Who: **owner** · Effect: **changes the plan**
#### Keep the current plan [#keep-plan]
Shown while a change is scheduled. Withdraws the scheduled change; the current plan carries on.
Who: **owner** · Effect: **changes the plan**
#### Monthly · Annual [#cycle]
Switches the plan cards between monthly and annual prices, and picks the cycle you buy or change to. A **Save** badge shows the annual discount when there is one.
Who: **everyone** · Effect: changes nothing
#### Promo code · Apply [#promo-code]
**Apply** checks the code for the chosen cycle and says what it gives. The code is used when you then choose a plan.
Who: **owner** · Effect: changes nothing until you choose a plan
#### Upgrade to · Switch to [#choose-plan]
On every plan card but yours, which reads *You're on this plan*. **Upgrade to** names a dearer plan; **Switch to** a cheaper one.
* **Without a paid plan**, it takes you to Stripe Checkout for that plan and cycle, with the promo code you entered, if any.
* **On a paid plan**, the change is worked out first. **Change to …** shows what it costs and when it applies; **Change plan** confirms. A dearer plan, or the same plan from Monthly to Annual, applies at once, prorated. A cheaper plan, or the same plan from Annual to Monthly, starts when the current period ends.
* **A cheaper plan that cannot hold what you have** is refused with a list of what to remove first: stores, extra seats, members or pending invitations.
Who: **owner** · Effect: **costs money**, **changes the plan**
### The Credits card [#credits-card]
One prepaid balance for every AI action in this organization, from every member and key. How actions are priced and refunded: [Credits](#credits) below.
* **Balance** and **Spent in 30 days**: everyone sees them.
* **On this route**: the price of each meter on the current model route — **Images up to 1024 px** and **Images above 1024 px** (per image), **Listing copy** (per language), **Small text calls** (per call), **Buyer insights** (per report).
#### Top up [#top-up]
A row of amounts. Clicking one takes you to Stripe Checkout to pay it; the Credits are added within a minute of paying.
Who: **owner, admin** · Effect: **costs money**
#### View ledger [#view-ledger]
Opens the [Credit ledger](#ledger).
Who: **owner, admin** · Effect: changes nothing
#### Model route [#model-route]
The route your organization's AI actions run on. A member sees its name only. Picking another route asks first, *Switch the model route to …?*, and lists the prices it brings next to the current ones. **Switch route** applies it to every AI action in the organization, for every member and key, from then on.
Who: **owner, admin** · Effect: **changes settings**, and the prices of later AI actions
### Team seats [#seats]
A seat lets one more person work in the organization; the owner uses none.
| Figure | What it counts |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------- |
| **In use** | Members who have joined. |
| **Reserved** | Invitations waiting; each holds a seat. **Invite someone →** under **Free** opens [Members](/help/app/settings/members#invite). |
| **Free** | Seats left. |
| **Total** | The plan's included seats plus the extra seats bought. |
On a plan that cannot add seats, the card says *Seats come with the plan; a paid plan with a team can add more.*
#### Change seats [#change-seats]
Opens **Change extra seats**: **One seat fewer** / **One seat more** set the number of extra seats (up to 20). **Now** and **After** compare total and free seats, and the box below says what is charged today to the card on file (prorated), or that nothing is charged today and when the change takes effect.
* More seats: **Confirm and pay**, charged at once.
* Fewer seats: **Confirm change**. Nothing is refunded; you keep the seats until renewal, then pay less. You cannot go below the seats in use or reserved: remove a member or withdraw an invitation first. **How removing seats works** says the same.
Who: **owner** · Effect: **costs money** when adding seats
#### Keep … [#keep-seats]
Shown while a decrease is scheduled (*Scheduled: extra seats … → … on …*). **Keep**, with your current number, cancels the decrease and keeps the extra seats you have.
Who: **owner** · Effect: **changes the plan**
### Refer a friend [#referral]
Your own referral link, not the organization's. When a friend you referred first pays, you each get Credits; the card says how many.
#### Get my referral link [#referral-link]
Creates your link the first time. From then on the card shows **Your referral link** with **Copy**, and three figures: **Friends referred**, **Rewards earned** and **Credits earned**.
Who: **everyone** · Effect: creates your link
### Invoices [#invoices]
**Invoices** at the top of the page. Owner and admins only; anyone else reads *Invoices are shown to the owner and admins.*
* The total paid, at the top.
* **Invoice lines**: **Date**, **Description**, **Amount** of every paid invoice line.
* **Plan history**: every start, change and end of the subscription — **Date**, **Event** (**Started**, **Plan changed**, **Cancellation scheduled**, **Cancellation withdrawn**, **Renewed**, **Payment failed**, **Ended**, **Charged separately**), **Plan name**, **Billing cycle**.
**← Billing & Credits** goes back.
### Credit ledger [#ledger]
**View ledger** on the Credits card. Owner and admins only. Every movement of the balance, newest first, 50 to a page:
| Column | What it shows |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **When** | The time of the entry. |
| **Entry** | **Held** (set aside when an action starts), **Charged**, **Refunded**, **Top-up**, **Granted**, **Referral reward**, **Referral reward taken back** or **Carried over**. |
| **Credits** | The change: negative when spent. |
| **Meter** | What was priced, as on the Credits card. |
| **Feature** | The feature that spent it. |
| **Surface** | Where it came from: **AI client (MCP)**, **Sheets sidebar**, **Web** or **Tool API**. |
| **Model route** | The route it ran on. |
| **Model** | The model that ran. |
**Columns** chooses which columns show; page through older entries below the table. **← Billing & Credits** goes back.
## Credits [#credits]
Most tools — reading orders, stock, reports, changing listings or bids — cost no Credits. A few actions run an AI model on SellerSheet's side and are paid from your workspace's **Credits** balance:
* **Images** — generating and editing listing images (`generate_image`, `edit_image`, `reverse_prompt`).
* **Listing copy** — titles, bullets and descriptions generated in the app.
* **Buyer insights** — the buyer-insights report (`customerFeedback_insights_report`).
How they are charged:
* **Priced by the server, before it runs.** Your agent never sends a price; the server prices the action from what you asked for (an image's size, the number of languages). `credits_quote` tells your agent the price before it starts.
* **Held, then settled.** The price is held when the action starts and settled when it is delivered.
* **Refunded when it fails.** Every failure path returns the hold, so a failed action costs nothing.
Top up and choose your workspace's model route on **Settings → Billing & Credits** (owner or admin). If jobs keep failing on one route, switch to another there. When the balance is too low, the call is refused with 402 before anything runs.
## Limits [#limits]
Your plan sets how fast and how much your agents and code can work — every plan and its numbers are on [Plans and prices](/#pricing).
* **Rate windows** — calls per minute, hour and day, counted together for MCP and the Tool API.
* **Calls in flight** — how many calls run at the same time.
* **Marketplaces** — how many marketplaces sync, shared by Amazon stores and noon accounts.
* **Keys** — how many MCP keys and API keys you can have.
When a window is full, the call is refused with **429** and a `Retry-After` header: wait that many seconds and try again. Amazon's own quotas also answer 429 with `Retry-After` — your agent waits the same way.
Report questions answered from your synced tables (`query_report_data`) don't spend Amazon's rate limits at all — another reason to ask history from the warehouse and today's state live. See [Synced reports](/docs/mcp-api/workflows/reports).
## Related [#related]
* [Plans and prices](/#pricing): every plan, its price and its limits.
* [Stay in control](/docs/mcp-api/control): what a key or a member may do on each store.
* [Organization](/help/app/settings/organization) and [Members](/help/app/settings/members): who owns the organization, and its seats.
## Stuck? [#stuck]
* [Web app errors](/help/troubleshooting/app): what each error means and the fix.
* [Contact support](/help/contact)
# Members (https://sellersheetai.com/help/app/settings/members)
> Invite teammates and decide what each one may see and change.
What a key or a member may do on each store: [Stay in control](/docs/mcp-api/control).
**Settings → Members** lists the people of your organization, their role and the stores they reach. Everyone in the organization can open it. The owner and admins invite people, set a member's access and remove people. Only the owner changes roles, invites an admin or removes one. A member reads the list, but not the addresses of pending invitations or other members' access.
## The three roles [#roles]
| Role | Reaches | Manages |
| ---------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **Owner** | Every store and noon account | Everything, including billing, roles and deleting the organization. One per organization. |
| **Admin** | Every store and noon account | Stores, noon accounts and members (not roles), credit top-ups and the model route. Not the plan, seats or deleting the organization. |
| **Member** | Only the stores and noon accounts granted to them, at the level granted | None of the organization's settings; reads the member list. |
A member's access is set per store, separately for the **Seller API** and the **Ads API**, and once per noon account. Each level is **None**, **Read** or **Read & write**. A member's keys and AI never reach beyond it.
## Main steps [#main-steps]
**Invite.** **Invite member** → **Email** → **Role** → for a member, the access for each store and noon account → **Send invitation**. They get an e-mail with a sign-in link.
**They accept.** The link opens [Stores & Marketplaces](/help/app/settings/stores#invites), where the invitation waits under **Invitations**. Until then, they show as **Invited** here.
**Adjust later.** **Access** on a member's row changes their stores and levels at any time.
## At the top of the page [#header]
* **People**: how many are in the organization, invitations included. **Columns** chooses which columns the table shows.
* **The seats line**: seats used and the plan's cap, how many **pending invitations hold a seat**, and any **extra seats** bought. The owner uses no seat.
### Buy a seat [#buy-a-seat]
When the team is full, the owner sees an offer for one more seat with **Buy a seat**. It adds the seat at once and charges the card on file. On a plan that cannot buy seats, the line links **The team is full — upgrade the plan for more seats** to [Billing & Credits](/help/app/settings/billing#seats) instead.
Who: **owner** · Effect: **costs money**, **changes settings**
## Invite member [#invite]
Opens **Invite a member**:
* **Email**: their address. They do not need a SellerSheet account yet.
* **Role**: **Member** (*Reaches only the stores you grant below*) or **Admin** (*Reaches every store and manages members — everything but billing and deletion*). Only the owner can invite an admin.
* **Access**, for a member: one row per store of the organization, with **Seller API** and **Ads API** levels. A store left at **None** on both is not granted.
* **noon account access**, for a member: one level per noon account.
* **Send invitation** e-mails a sign-in link.
An invitation holds a seat until it is accepted or withdrawn. With no seat free, it is refused, and the message says how to get one more. Inviting an address that is already invited replaces that invitation's role and access and sends it again. An organization can send 20 invitation e-mails a day (UTC), resends included.
Who: **owner, admin** (an admin invites members only) · Effect: **changes settings**, sends an e-mail
## The member list [#list]
| Column | What it shows |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Member** | Name and e-mail; **(you)** marks your own row. An invited person shows the address they were invited at. |
| **Role** | **Owner**, **Admin** or **Member**. |
| **Status** | **Active** or **Invited**. |
| **Access** | **Every store** for the owner and admins. For a member, the number of stores and noon accounts and their refs; hover for each ref and its levels. **No store yet** when nothing is granted. |
| **Joined** | When they joined. |
There are no actions on the owner's row or on your own.
### Role [#role]
A menu on an active member's row: **Admin** or **Member**. Making an admin a member asks first: they keep only the stores granted to them, and their keys in this organization switch off if no store is granted. The owner keeps the owner role; to hand it over, use [Transfer ownership](/help/app/settings/organization#transfer).
Who: **owner** · Effect: **changes settings**
### Access [#access]
On a member's row. Opens **Access of** the member: the same store grid and noon grid as the invitation. **Save** applies every change at once and tells you how many changed. **None** on both levels removes a store; **None** removes a noon account. A member left with no store and no noon account has their keys in this organization switched off.
You can also set access one store at a time from [Stores & Marketplaces → Access](/help/app/settings/stores#access).
Who: **owner, admin** · Effect: **changes settings**
### Resend [#resend]
On an invited person's row. Sends the invitation e-mail again. It counts toward the 20 a day.
Who: **owner, admin** · Effect: sends an e-mail
### ⋯ Remove member [#remove]
Asks first. Their store access ends and their keys in this organization stop working. Only the owner can remove an admin. To leave an organization yourself, use [Leave](/help/app/settings/organization#leave) on Organization.
Who: **owner, admin** · Effect: **changes settings**
### ⋯ Withdraw invitation [#withdraw]
On an invited person's row, in place of **Remove member**. Asks first; the seat it held is freed.
Who: **owner, admin** · Effect: **changes settings**
## Related [#related]
* [Stay in control](/docs/mcp-api/control): write access per store, and why a key never reaches beyond its holder.
* [Read, write & destructive](/docs/mcp-api/access): what **Read** and **Read & write** allow.
* [Keys & store access](/docs/mcp-api/keys): each key's own stores and levels.
* [Stores & Marketplaces](/help/app/settings/stores): the stores you grant, and the **Invitations** card.
* [Billing & Credits](/help/app/settings/billing#seats): seats and extra seats.
## Stuck? [#stuck]
* [Web app errors](/help/troubleshooting/app): what each error means and the fix.
* [Contact support](/help/contact)
# Organization (https://sellersheetai.com/help/app/settings/organization)
> Your workspace's name and settings.
An organization is a workspace with its own stores, members, plan and credits. **Settings → Organization** shows the one you are working in: its name and address, who owns it, its plan and seats, and how to hand it over, delete it or leave it. Everyone in the organization can open it. The owner and admins edit the profile; only the owner transfers or deletes the organization; anyone but the owner can leave it.
Every account also has a **personal** organization of its own. It cannot be transferred, deleted or left.
## At the top of the page [#header]
The organization's name, your role in it (**Owner**, **Admin** or **Member**), **Personal** when it is your personal organization, and its address.
## Profile [#profile]
The organization's name and its address. A member sees them read-only, with the line *Only the owner and admins can change these.*
### Name [#name]
Up to 120 characters; it cannot be empty.
Who: **owner, admin** · Effect: **changes settings**
### Address [#address]
The organization's short unique name: 3–60 characters, `a`–`z`, `0`–`9` and `-`, not at either end. An address another organization already uses is refused: choose another.
Who: **owner, admin** · Effect: **changes settings**
### Undo changes · Save [#save]
**Undo changes** puts back the saved name and address. **Save** saves both.
Who: **owner, admin** · Effect: **changes settings**
## Details [#details]
Read-only, for everyone:
| Field | What it shows |
| ------------------ | --------------------------------------------------------------------------------- |
| **Owner** | The owner's name and e-mail. |
| **Created** | When the organization was created. |
| **Active members** | People who have joined. |
| **Plan** | The plan, and when it ends if an end date is set. **No plan** when there is none. |
| **Seats** | Seats used, the plan's cap and pending invitations. |
| **Extra seats** | Seats bought on top of the plan. |
To change the plan or the seats, go to [Billing & Credits](/help/app/settings/billing).
## Ownership and membership [#ownership]
What you see here depends on your role. In your personal organization it only says that it cannot be transferred, deleted or left.
### Transfer ownership [#transfer]
**Transfer** opens a dialog: choose the **New owner** among the active members, then **Transfer**. You become an admin; only the new owner can manage billing or delete the organization from then on. When no one can take it over yet, the dialog says to invite a member and let them accept first.
Who: **owner** · Effect: **changes settings**
### Delete organization [#delete]
Possible only once the organization has no stores, noon accounts, active keys, credits, paid plan or products; otherwise the refusal names what is left. You type the organization's name to confirm. Its members move to their own organizations, and you land on Home.
Who: **owner** · Effect: **changes settings**, **cannot be undone**
### Leave organization [#leave]
**Leave** asks first. Your store access here ends and your keys in it stop working. Someone must invite you again to come back. You land on Home, in your personal organization. The owner cannot leave: transfer the organization first, or delete it.
Who: **admin, member** · Effect: **changes settings**
## Another organization [#create]
**Create organization** is in the organization switcher, not on this page. It creates a new workspace with its own stores, members, plan and credits, and you become its owner. To work in another organization you belong to, switch to it there, or from [Stores & Marketplaces](/help/app/settings/stores#shared).
## Related [#related]
* [Members](/help/app/settings/members): invite people and set what they reach.
* [Billing & Credits](/help/app/settings/billing): the plan, seats and credits of this organization.
* [Stores & Marketplaces](/help/app/settings/stores): this organization's stores, and the other organizations you belong to.
* [Keys & store access](/docs/mcp-api/keys): keys belong to an organization; leaving one switches yours there off.
## Stuck? [#stuck]
* [Web app errors](/help/troubleshooting/app): what each error means and the fix.
* [Contact support](/help/contact)
# Stores & Marketplaces (https://sellersheetai.com/help/app/settings/stores)
> Connect Amazon, Ads and noon, choose the marketplaces that sync, reauthorize a store.
The setup itself is in [Connect your store](/docs/start/connect).
**Settings → Stores & Marketplaces** lists your organization's Amazon stores and noon accounts: which marketplaces sync, who reaches each one, and the state of each authorization. Everyone in the organization can open it. The owner and admins add, change and remove stores and noon accounts. A member sees only what was granted to them, read-only, and can give a store a name of their own.
Each control below says who may use it and what it changes:
* **Changes settings**: changes SellerSheet only.
* **Changes Amazon access** / **Changes noon access**: sends you to Amazon's or noon's sign-in, or replaces an authorization.
* **Cannot be undone**: there is no way back.
## Main steps [#main-steps]
**Add the store.** **Add store** → **Store type**, **1. Region**, **2. Marketplaces**, **3. Store Name** → **Authorize with Amazon**. Sign in on Amazon with the account that owns the store and approve. You come back here with the store in the list.
**Choose the marketplaces that sync.** **Edit markets** on the store's row. Only the marketplaces that are on sync reports and answer your AI, and each one counts against your plan.
**Authorize Ads,** if you advertise: **Ads** on the store's row.
**Add noon** (optional): **Add noon account** → name and marketplaces → **Connect with noon**.
**Decide who reaches it:** **⋯ → Access** on the row sets each member's access. To bring someone new in, invite them on [Members](/help/app/settings/members).
## At the top of the page [#header]
* **Plan badge** and **Marketplaces used / cap · Stores used / cap**: your plan's quota. Amazon marketplaces and noon marketplaces share one pool.
* **The outcome banner**: after any Amazon, Ads or noon sign-in, a banner says how it ended, in the server's own words. When the plan was the reason, it links **Upgrade the plan**. **×** closes it.
## Invitations [#invites]
Shown only while an organization has invited you and you have not answered. Each line says who invited you, as what role, and the store refs they share.
### Accept [#accept]
Opens **Join** with the organization's name. You may give each shared store **Your name for it (optional)** — only you see it, and your refs for that store use it. Leave it empty to keep the store's own name. When the store's name already names one of your stores in the same marketplace, a suggestion is filled in: the store's name and the organization's, joined by `_`. Change it if you like.
Who: **the person invited** · Effect: **changes settings** (you join the organization)
### Decline [#decline]
Asks first. They would have to invite you again.
Who: **the person invited** · Effect: **changes settings**
## Amazon stores [#stores]
The owner and admins see every store of the organization. A member sees the stores granted to them.
### Columns [#stores-columns]
**Columns** at the top right of the card chooses which columns show.
| Column | What it shows |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Store** | The store's name and its first store ref, such as , with **+N** for the others. Hover the refs to see every one. These are the refs your sidebar and your AI use. |
| **Type** | **Seller Central** or **Vendor Central**. |
| **Seller ID** | Amazon's seller ID. |
| **Region** | The Amazon region the store was authorized in. |
| **Marketplaces** | The marketplaces that are on, then the authorized ones that are off, greyed. Hover for the names. |
| **Store authorization** | **Authorized**, **Expiring** (30 days or less left; hover for the days), **Expired**, **Revoked** or **Unknown**. Amazon asks for a new authorization every year. |
| **Store authorized** | When the store was last authorized. |
| **Ads authorization** | **Authorized** (hover for the number of Ads profiles), **Revoked** or **Not connected**. |
| **Ads authorized** | When Ads was last authorized. |
| **Marketing Cloud** | One chip per Ads country where Amazon Marketing Cloud is turned on: **On**, **Creating** or **Failed**; "—" when it is off everywhere. See [Turn on Marketing Cloud](#amc). |
| **Members with access** | The owner and admins, plus the members granted this store. |
| **Issues** | The number of problems, red when one is an error. See [Issues](#issues). |
### Add store [#add-store]
Opens **Add Amazon Store**, its fields in this order:
* **Store type**: **Seller Central** or **Vendor Central**. A Vendor Central store takes one marketplace at a time.
* **1. Region**: the Amazon region. Changing it clears the marketplaces.
* **2. Marketplaces**: the marketplaces to authorize. The line below counts them against your plan, Amazon and noon together. **Compare plans** opens [Billing & Credits](/help/app/settings/billing).
* **3. Store Name**: 1–10 letters, digits or `_`. The line below shows the ref your sidebar and AI will use, such as .
* **Authorize with Amazon**: checks your plan, then sends you to Amazon's consent screen. Sign in with the account that owns the store and approve.
When a store with the same name, region and type is already here, the dialog says so and the button becomes **Reauthorize on Amazon**. Going on re-authorizes that store with the account you sign in with: its tokens are refreshed and its schedules kept. A different seller account is refused. When your plan has no room for the marketplaces you picked, the dialog says how many are left: pick fewer, or upgrade. A seller account already connected in another organization is refused.
Who: **owner, admin** · Effect: **changes Amazon access**; the marketplaces count against your plan
### Edit markets [#edit-markets]
Opens **Marketplaces of** the store: the store's whole set of marketplaces, saved in one go with **Save**. The line at the top counts your plan's marketplaces as they will be after the change, noon accounts included. Next to a marketplace you may see:
* **Not authorized**: Amazon did not authorize it for this store. Re-authorize the store to add it.
* **On until** a date: a marketplace stays on for 30 days after it is turned on, so it cannot be turned off before that date.
* **No slot left on the plan**: every marketplace of your plan is in use.
* **Ads not authorized here**: the store has Ads, but no Ads profile for this marketplace.
A marketplace that is off stops syncing. A store with no marketplace on is **paused**: your AI is told so instead of getting stale data. Past your plan's quota, **Save** is refused with the reason.
Who: **owner, admin** · Effect: **changes settings**
### Rename [#rename]
Opens **Rename store**: the name everyone in the organization sees, up to 100 letters, digits, spaces, `-`, `_` or `.`. Every ref of the store changes with it, and the old refs stop working at once, so update prompts and sheets that use them. A name already used by a store with an overlapping marketplace is refused.
Who: **owner, admin** · Effect: **changes settings**
### Rename for me [#rename-for-me]
A member's only action on a store. Opens **Your name for this store**: only you see this name, and the store keeps its own. Your refs for the store use your name from then on, and your old refs stop working.
Who: **member** · Effect: **changes settings** (yours only)
### Reauthorize [#reauthorize]
Runs **Add store** again with the store's own name, region, type and marketplaces, straight to Amazon's consent screen. Use it when **Store authorization** says **Expiring**, **Expired** or **Revoked**. After Amazon you land on [Re-authorize store](#confirm-reauth) to confirm.
Who: **owner, admin** · Effect: **changes Amazon access**
### Ads [#ads]
Sends you to Amazon Advertising's consent screen for this store. Amazon Ads is a separate authorization from the store's. Without it, ad tools and ad report syncs have nothing to work with. Other stores of this organization that the same Ads account covers are linked too. Amazon's answer is shown in the outcome banner when you come back.
Who: **owner, admin** · Effect: **changes Amazon access**
### ⋯ Refresh Ads profiles [#refresh-ads-profiles]
Reads the store's Ads profiles again with the authorization you already gave; there is no Amazon sign-in. New profiles are added, none are removed, and a message names the marketplaces that gained one. Available only while **Ads authorization** is **Authorized**.
Who: **owner, admin** · Effect: **changes settings**
### ⋯ Turn on Marketing Cloud [#amc]
Opens **Turn on Amazon Marketing Cloud**. Pick the **Marketplace** and click **Turn on**: Amazon creates a Marketing Cloud (AMC) instance on the store's Ads account for that country, or SellerSheet finds the one you already have. Your AI can then answer AMC questions for the store, and SellerSheet starts syncing its AMC reports. Amazon can take up to five minutes; while the chip says **Creating**, open the dialog again and click **Check again**.
Before the first one in a region, accept the AMC terms at Amazon with the login that connected Ads. Until then the dialog shows Amazon's message and **Open Amazon Marketing Cloud**. Available while **Ads authorization** is **Authorized** and a marketplace with an Ads profile does not have AMC on yet. Prerequisites and what your AI can do with it: [Use Amazon Marketing Cloud with your own AI](/guides/analyze-amazon-marketing-cloud-with-ai).
Who: **owner, admin** · Effect: **cannot be undone** (it creates an AMC instance on your Ads account, and Amazon cannot delete one)
### ⋯ Access [#access]
Opens **Who reaches** the store. The owner and admins reach **Every store, by role**. Each member has two levels for this store, **Seller API** and **Ads API**: **None**, **Read** or **Read & write**. A change applies at once. **None** on both removes the member from the store. To add someone new, use **Invite someone on the Members page**.
A member's keys and AI never reach beyond these levels. See [Stay in control](/docs/mcp-api/control).
Who: **owner, admin** · Effect: **changes settings**
### ⋯ Delete store [#delete-store]
Asks you to type the store's name. Deletes the store and every report synced for it: its schedules stop and its data is removed. The members' grants and key rules on it go too, and an Ads account no other store uses.
Who: **owner, admin** · Effect: **changes settings**, **cannot be undone**
### Issues [#issues]
The chip on a row opens the list of the store's problems. Each one has its fix:
| Problem | Fix in the list |
| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
| An authorization error from Amazon, with its time | **Reauthorize** |
| The store authorization has expired, or expires within 30 days | **Reauthorize** |
| The store was authorized before Brand Analytics was included: re-authorizing unlocks Search Terms, Repeat Purchase, Sales & Traffic and Data Kiosk | **Reauthorize** |
| The Ads authorization was revoked | **Reauthorize Ads** |
| Sync paused: no marketplace of the store is on, so its reports stopped updating | **Edit markets** |
The fix links show to the owner and admins only.
Who: **everyone** sees the list; **owner, admin** use the fixes
## noon accounts [#noon]
The owner and admins see every noon account of the organization. A member sees the accounts shared with them, read-only, with a **Your access** column.
### noon columns [#noon-columns]
| Column | What it shows |
| ---------------- | ---------------------------------------------------------------------------------------- |
| **Account** | The account's name and its first ref, such as `myStore-AE`. Hover for every ref. |
| **Project code** | The noon Partner project. |
| **Marketplaces** | The account's noon marketplaces. Every one counts against your plan. |
| **Connection** | **OAuth** (signed in on noon) or **API key**. |
| **noon status** | **Connected**, **Role missing** or **Sign-in failed**. Hover for noon's own explanation. |
| **Connected** | When the account was connected. |
| **Your access** | For a member: **None**, **Read** or **Read & write**. |
### Add noon account [#add-noon-account]
Opens **Add a noon account**:
* **Account name**: 1–10 letters, digits or `_`. It starts the account's refs, such as `myStore-AE`, and must be unique in the organization.
* **Marketplaces**: the noon marketplaces to connect. All of them count against your plan.
* **Connect with noon** (the default tab): sign in on noon and let it grant access, with no key to copy. The button **Connect with noon** sends you there.
* **Use an API key**: **Key ID**, **Private key** (the whole key, BEGIN and END lines included; it is stored encrypted), **Project code** and **Channel identifier** (only when noon gave you one), then **Connect account**. noon checks the key before anything is saved.
A noon project can be connected to one organization only. When noon sign-in is not available, the dialog shows the API key form only and says why.
Who: **owner, admin** · Effect: **changes noon access**; the marketplaces count against your plan
### Recheck [#recheck]
Checks the stored connection with noon again and updates **noon status**.
Who: **owner, admin** · Effect: **changes settings** (the status only)
### Marketplaces [#noon-marketplaces]
Opens **noon marketplaces of** the account. Pick at least one and **Save**. Past your plan's quota, it is refused with the reason.
Who: **owner, admin** · Effect: **changes settings**
### Reconnect [#reconnect]
Shown for an account connected with **OAuth**. Sends you to noon's sign-in again for the same project, keeping the account's name and marketplaces. A sign-in that comes back for another project is refused.
Who: **owner, admin** · Effect: **changes noon access**
### ⋯ Access (noon) [#noon-access]
Opens **Who reaches the noon account**. The owner and admins reach **Every noon account, by role**. Each member has one level: **None**, **Read** or **Read & write**. A change applies at once; **None** removes the member from the account.
Who: **owner, admin** · Effect: **changes settings**
### ⋯ Disconnect [#disconnect]
Asks first. The account's reports stop syncing and its key is forgotten. Its marketplaces no longer count against your plan, and the members' access to it goes too.
Who: **owner, admin** · Effect: **changes settings**, **cannot be undone** (connect it again to come back)
## Other organizations you belong to [#shared]
Every other organization you are in, with your role there and the stores and noon accounts you reach in it, read-only.
### Switch to [#switch]
Makes that organization the one you work in, so the app shows its stores. To leave it, switch first, then use [Leave](/help/app/settings/organization#leave) on Organization.
Who: **everyone** · Effect: changes nothing
## Re-authorize store [#confirm-reauth]
You land here after Amazon when the account you signed in with is already connected here as a store. Nothing has changed yet. The card **Confirm the re-authorization** compares the store **Now** and **After you confirm** (name, region, type, marketplaces) and lists:
* **Added**: marketplaces Amazon now authorizes that the store did not have.
* **No longer authorized by Amazon — turned off**: marketplaces Amazon dropped. They stop syncing.
* **Active on this plan**: the marketplaces that will be on.
* **Not activated — no free marketplace on this plan**: marketplaces that stay off until a slot is free.
Then:
* **Confirm re-authorization** replaces the store's authorization with the new one.
* **Cancel** keeps the current one.
Either way you go back to Stores & Marketplaces (or to Home's setup guide, if you started there), where the banner says what happened. If nothing is waiting to be confirmed — it expired, it was already confirmed, or it was started in another browser — this page sends you straight to Stores & Marketplaces.
Who: **owner, admin** · Effect: **changes Amazon access**
## Related [#related]
* [Connect your store](/docs/start/connect): the whole first setup.
* [Store refs](/docs/mcp-api/store-refs): how refs are built, and [paused stores](/docs/mcp-api/store-refs#paused-stores).
* [Stay in control](/docs/mcp-api/control) and [Keys & store access](/docs/mcp-api/keys): what a member or a key may do on each store.
* [How to connect noon to SellerSheet](/guides/connect-noon-to-sellersheet) and [Selling on noon](/docs/mcp-api/workflows/noon).
* [Members](/help/app/settings/members): invite people and set their access for every store at once.
* [Billing & Credits](/help/app/settings/billing): your plan and its marketplaces.
## Stuck? [#stuck]
* [Web app errors](/help/troubleshooting/app): what each error means and the fix.
* [Contact support](/help/contact)
# Webhook message schema (https://sellersheetai.com/help/app/settings/webhooks-schema)
> Every field of a SellerSheet Webhooks HTTPS delivery, schemaVersion 1 — the headers, the delivery, each message, its store, Amazon's notification and the typed summary of every notification delivered today.
What an [HTTPS webhook](/help/app/settings/webhooks#https-body) receives, field by field. The same is published as a JSON Schema (draft 2020-12) at [sellersheetai.com/schemas/webhooks-v1.json](https://sellersheetai.com/schemas/webhooks-v1.json), with one sample delivery per notification at [sellersheetai.com/schemas/webhooks-v1-samples.json](https://sellersheetai.com/schemas/webhooks-v1-samples.json). Every value on this page is made up.
Rules that hold everywhere:
* Keys are camelCase, except inside [`amazon`](#amazon), which keeps Amazon's own spelling.
* Every key is always sent. "Required" below is what the schema requires; a key that is not required is sent as `null` (or `[]`, `{}`) when it has no value.
* Objects are not closed: a key you do not know may appear later within `schemaVersion` 1 — ignore it.
* Times are ISO 8601 date-times in UTC (`2026-10-27T09:28:33Z`), except inside `amazon`, which keeps Amazon's text.
## Headers [#headers]
| Header | Example | What it is |
| --------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Content-Type` | `application/json` | Always JSON. |
| `X-SellerSheet-Webhook-Id` | `0c6f2a8e-4d1b-4e7a-9b35-6e8d2f1a4c90` | The webhook — equal to `webhookId`. |
| `X-SellerSheet-Delivery-Id` | `dlv_8f3a1c9e2b7d4e6fa0b1c2d3e4f5a6b7` | The delivery — equal to `deliveryId`, the same on every try. |
| `X-SellerSheet-Timestamp` | `1793092113` | Unix seconds when this try was sent. |
| `X-SellerSheet-Signature` | `sha256=2225d8c4…` | `sha256=` and the hex HMAC-SHA256, keyed with your signing secret, of the timestamp, a `.` and the raw body. [How to verify](/help/app/settings/webhooks#verify-signature). |
| `X-SellerSheet-Test` | `false` | `true` on a **Send test**: the messages are samples for the made-up store `SampleStore`. |
## The delivery [#delivery]
The body of one request: up to 100 messages, at most 1 MB.
| Field | Type | Required | What it is | Example |
| ---------------- | ---------------------------- | -------- | ----------------------------------------------------- | -------------------------------------- |
| `deliveryId` | string | yes | This delivery. The same on every try of it. | `dlv_8f3a1c9e2b7d4e6fa0b1c2d3e4f5a6b7` |
| `webhookId` | string | yes | The webhook it was sent to. | `0c6f2a8e-4d1b-4e7a-9b35-6e8d2f1a4c90` |
| `organizationId` | string | yes | Your workspace. | `7b2e9c41-0d3a-4f6b-8e15-9c2a4d6f8b30` |
| `sentAt` | date-time | yes | When this try was sent. | `2026-10-27T09:28:33Z` |
| `attempt` | integer ≥ 1 | yes | Which try this is: 1, 2 or 3. | `1` |
| `schemaVersion` | integer, `1` | no | This format's version — always `1`. | `1` |
| `messages` | array of [message](#message) | yes | The messages, in the order SellerSheet received them. | |
## A message [#message]
One Amazon notification.
| Field | Type | Required | What it is | Example |
| ------------- | ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| `messageId` | string | yes | Amazon's NotificationId. Drop one you already handled. | `5c0e8f4a-2b7d-4e91-a3c6-000000000001` |
| `messageType` | string | yes | Amazon's notification type; it decides the shape of [`summary`](#summary). More types may be added within `schemaVersion` 1. | `LISTINGS_ITEM_ISSUES_CHANGE` |
| `fingerprint` | string or null | no | `sha256:` and 64 hex characters, the same for the same change published again by Amazon under a new `messageId`. | `sha256:af6e358a…` |
| `store` | [store](#store) or null | no | Your store and the marketplace the message is about. A delivered message always names one of your stores. | |
| `eventTime` | date-time or null | no | When the change happened (Amazon's EventTime). | `2026-10-27T09:14:03Z` |
| `publishTime` | date-time or null | no | When Amazon sent it. | `2026-10-27T09:28:30Z` |
| `receivedAt` | date-time | yes | When SellerSheet received it. | `2026-10-27T09:28:32Z` |
| `summary` | [summary](#summary) | yes | SellerSheet's reading of the message, typed by `messageType`. | |
| `amazon` | [amazon](#amazon) | yes | Amazon's notification, every value as Amazon sent it. | |
## store [#store]
| Field | Type | Required | What it is | Example |
| --------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| `storeId` | string | yes | SellerSheet's ID of the store. | `3f6c2a9e-5b1d-4c8e-9a7f-2d4e6b8c0a11` |
| `ref` | string | yes | The store ref `-`: the store name and the message's marketplace. | `myStore-US` |
| `sellerId` | string or null | no | Amazon's seller ID. | `A1EXAMPLESELLER` |
| `marketplaceId` | string or null | no | Amazon's marketplace ID — `null` when Amazon names none (account health, reports, feeds and other account-wide messages). | `ATVPDKIKX0DER` |
| `countryCode` | string or null | no | The marketplace's country code. | `US` |
| `connected` | boolean | yes | `false` when the store has not connected this marketplace in SellerSheet. | `true` |
## amazon [#amazon]
Amazon's notification — the source of truth. The top-level names are fixed; every value is exactly what Amazon sent, in Amazon's own casing (PascalCase for some notifications, camelCase for others): read a key in either casing.
| Field | Type | Required | What it is | Example |
| ---------------------- | -------------- | -------- | ------------------------------------------------------------------------------------------ | ----------------------------- |
| `notificationType` | string | yes | Amazon's NotificationType. | `LISTINGS_ITEM_ISSUES_CHANGE` |
| `notificationVersion` | string or null | no | Amazon's NotificationVersion. | `1.0` |
| `payloadVersion` | string or null | no | Amazon's PayloadVersion — the shape of `payload`. | `2023-12-13` |
| `eventTime` | string or null | no | Amazon's EventTime, as Amazon wrote it. | `2026-10-27T09:14:03.000Z` |
| `notificationMetadata` | object | no | Amazon's NotificationMetadata: ApplicationId, SubscriptionId, PublishTime, NotificationId. | |
| `payload` | object | no | Amazon's Payload, unchanged. | |
The `payload` of each notification is documented by Amazon in the Selling Partner API's notification type reference.
## summary [#summary]
Every summary has these four fields:
| Field | Type | Required | What it is | Example |
| ---------- | -------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `text` | string | yes | One readable line: the item and marketplace, plain words, then Amazon's field names and values. | `SKU SKU-EXAMPLE-01 (B0EXAMPLE01) on US: Listing not buyable (suppressed) · Severities=ERROR · EnforcementActions=LISTING_SUPPRESSED` |
| `severity` | `critical` · `warning` · `info` · `recovery` | yes | How bad it is — red, orange, blue, green on a chat card. [When each applies](/help/app/settings/webhooks#severity). | `critical` |
| `sku` | string or null | no | The SKU, when Amazon sent one. | `SKU-EXAMPLE-01` |
| `asin` | string or null | no | The ASIN, when Amazon sent one. | `B0EXAMPLE01` |
Then the fields of its `messageType`, below, in the order of the Webhooks page. A type this page does not list carries the four fields only. A full sample delivery of each type, valid against the schema: [webhooks-v1-samples.json](https://sellersheetai.com/schemas/webhooks-v1-samples.json).
| `messageType` | Notification |
| --------------------------------------------- | ------------------------------------------------------- |
| `LISTINGS_ITEM_ISSUES_CHANGE` | [Listing issues](#listing-issues) |
| `LISTINGS_ITEM_STATUS_CHANGE` | [Listing status](#listing-status) |
| `BRANDED_ITEM_CONTENT_CHANGE` | [Brand content](#brand-content) |
| `ITEM_PRODUCT_TYPE_CHANGE` | [Product type change](#product-type-change) |
| `LISTINGS_ITEM_MFN_QUANTITY_CHANGE` | [Self-fulfilled quantity](#self-fulfilled-quantity) |
| `PRODUCT_TYPE_DEFINITIONS_CHANGE` | [Product type definitions](#product-type-definitions) |
| `PRICING_HEALTH` | [Pricing health](#pricing-health) |
| `ANY_OFFER_CHANGED` | [Competing offers](#competing-offers) |
| `B2B_ANY_OFFER_CHANGED` | [Business offers (B2B)](#business-offers) |
| `FEE_PROMOTION` | [Fee promotions](#fee-promotions) |
| `ORDER_CHANGE` | [Order changes](#order-changes) |
| `FULFILLMENT_ORDER_STATUS` | [Multi-Channel Fulfillment orders](#mcf-orders) |
| `FBA_OUTBOUND_SHIPMENT_STATUS` | [FBA Onsite shipments (Brazil)](#fba-onsite-shipments) |
| `EXTERNAL_FULFILLMENT_SHIPMENT_STATUS_CHANGE` | [External fulfillment shipments](#external-shipments) |
| `FBA_INVENTORY_AVAILABILITY_CHANGES` | [FBA inventory](#fba-inventory) |
| `ITEM_INVENTORY_EVENT_CHANGE` | [Hourly inventory](#hourly-inventory) |
| `ITEM_SALES_EVENT_CHANGE` | [Hourly sales](#hourly-sales) |
| `DETAIL_PAGE_TRAFFIC_EVENT` | [Hourly page views](#hourly-page-views) |
| `TRANSACTION_UPDATE` | [Transactions](#transactions) |
| `ACCOUNT_STATUS_CHANGED` | [Account health](#account-health) |
| `REPORT_PROCESSING_FINISHED` | [Report finished](#report-finished) |
| `FEED_PROCESSING_FINISHED` | [Feed finished](#feed-finished) |
| `DATA_KIOSK_QUERY_PROCESSING_FINISHED` | [Data Kiosk query finished](#data-kiosk-query-finished) |
### Listing issues [#listing-issues]
`LISTINGS_ITEM_ISSUES_CHANGE` — the issues now in force on a listing. Amazon never sends the issue text: open the SKU in Seller Central to read it.
| Field | Type | What it is |
| -------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `severities` | array of string | Amazon's Severities: `ERROR`, `WARNING` (`NONE` is left out). |
| `enforcementActions` | array of string | Amazon's EnforcementActions: `LISTING_SUPPRESSED` (not buyable), `ATTRIBUTE_SUPPRESSED` (an attribute value rejected), `CATALOG_ITEM_REMOVED` (the catalog item is inactive, every offer non-buyable), `SEARCH_SUPPRESSED` (hidden from search). |
| `cleared` | boolean or null | `true` when no issue remains. |
```json
{
"text": "SKU SKU-EXAMPLE-01 (B0EXAMPLE01) on US: Listing not buyable (suppressed) · Severities=ERROR · EnforcementActions=LISTING_SUPPRESSED",
"severity": "critical",
"sku": "SKU-EXAMPLE-01",
"asin": "B0EXAMPLE01",
"severities": ["ERROR"],
"enforcementActions": ["LISTING_SUPPRESSED"],
"cleared": false
}
```
### Listing status [#listing-status]
`LISTINGS_ITEM_STATUS_CHANGE` — the listing's current status set. A status that is missing is its opposite: no `BUYABLE` means not buyable, no `DISCOVERABLE` means not in search results.
| Field | Type | What it is |
| -------------- | --------------- | ------------------------------------------------------ |
| `status` | array of string | Amazon's Status: `BUYABLE`, `DISCOVERABLE`, `DELETED`. |
| `buyable` | boolean or null | `BUYABLE` is in the set. |
| `discoverable` | boolean or null | `DISCOVERABLE` is in the set. |
| `deleted` | boolean or null | `DELETED` is in the set. |
```json
{
"text": "SKU SKU-EXAMPLE-02 (B0EXAMPLE02) on US: Buyable · Status=BUYABLE,DISCOVERABLE",
"severity": "recovery",
"sku": "SKU-EXAMPLE-02",
"asin": "B0EXAMPLE02",
"status": ["BUYABLE", "DISCOVERABLE"],
"buyable": true,
"discoverable": true,
"deleted": false
}
```
### Brand content [#brand-content]
`BRANDED_ITEM_CONTENT_CHANGE` — which attributes of a catalog item of your brand changed. No SKU. Amazon sends one copy per brand-owner store the webhook takes.
| Field | Type | What it is |
| ------------------- | --------------- | ------------------------------------------------------------------- |
| `brandName` | string or null | Amazon's BrandName. |
| `attributesChanged` | array of string | Amazon's AttributesChanged — attribute names as Amazon spells them. |
```json
{
"text": "ASIN B0EXAMPLE04 on US: Changed: item_name, bullet_point · AttributesChanged=item_name,bullet_point · BrandName=MyBrand",
"severity": "info",
"sku": null,
"asin": "B0EXAMPLE04",
"brandName": "MyBrand",
"attributesChanged": ["item_name", "bullet_point"]
}
```
### Product type change [#product-type-change]
`ITEM_PRODUCT_TYPE_CHANGE` — an ASIN's product type, before and now. What its listings must say may have changed with it. No SKU.
| Field | Type | What it is |
| --------------------- | -------------- | -------------------------------------------- |
| `previousProductType` | string or null | The product type before, as Amazon names it. |
| `currentProductType` | string or null | The product type now. |
### Self-fulfilled quantity [#self-fulfilled-quantity]
`LISTINGS_ITEM_MFN_QUANTITY_CHANGE` — a SKU's self-fulfilled quantity now. No ASIN, and no marketplace: the quantity is the seller account's.
| Field | Type | What it is |
| ------------------------ | --------------- | ------------------------------------------------------------------------------------------------------- |
| `quantity` | integer or null | The quantity now; `0` is out of stock. |
| `fulfillmentChannelCode` | string or null | Amazon's FulfillmentChannelCode: `DEFAULT` is your own fulfillment; another code names a supply source. |
### Product type definitions [#product-type-definitions]
`PRODUCT_TYPE_DEFINITIONS_CHANGE` — a new version of a marketplace's product type definitions. No SKU or ASIN. Amazon sends one copy per store the webhook takes.
| Field | Type | What it is |
| -------------------- | --------------- | ------------------------------------ |
| `productTypeVersion` | string or null | Amazon's ProductTypeVersion. |
| `newProductTypes` | array of string | The product types this version adds. |
### Pricing health [#pricing-health]
`PRICING_HEALTH` — why your offer cannot be the featured offer, against Amazon's reference prices. No SKU: Amazon sends the ASIN only.
| Field | Type | What it is |
| --------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `issueType` | string or null | Amazon's issueType, for example `BuyBoxDisqualification`. |
| `yourPrice` | [money](#money) or null | Your landed price: listing plus shipping. |
| `fulfillmentType` | string or null | `AFN` (FBA) or `MFN` (FBM). |
| `competitivePriceThreshold` | [money](#money) or null | Amazon's competitive price threshold. |
| `referencePrices` | object of [money](#money) | Every reference price Amazon sent, under Amazon's name: `competitivePriceThreshold`, `averageSellingPrice`, `retailOfferPrice`, `msrpPrice`, … |
```json
{
"text": "ASIN B0EXAMPLE03 on US: Not eligible for the featured offer · issueType=BuyBoxDisqualification · yours 29.99 USD, FBA (fulfillmentType=AFN) · competitivePriceThreshold=24.99 USD · averageSellingPrice=26.50 USD",
"severity": "warning",
"sku": null,
"asin": "B0EXAMPLE03",
"issueType": "BuyBoxDisqualification",
"yourPrice": { "amount": 29.99, "currencyCode": "USD" },
"fulfillmentType": "AFN",
"competitivePriceThreshold": { "amount": 24.99, "currencyCode": "USD" },
"referencePrices": {
"competitivePriceThreshold": { "amount": 24.99, "currencyCode": "USD" },
"averageSellingPrice": { "amount": 26.5, "currencyCode": "USD" }
}
}
```
### Competing offers [#competing-offers]
`ANY_OFFER_CHANGED` — the Buy Box, your offer and up to five other sellers' offers on an ASIN another seller is on. Amazon gives seller IDs, never names, and no SKU.
| Field | Type | What it is |
| --------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------- |
| `changeType` | string or null | Amazon's OfferChangeType, for example `External`. |
| `buyBox` | [buy box](#buy-box) or null | The Buy Box price and who holds it. |
| `yourOffer` | [offer](#offer) or null | Your own offer, when it is among Amazon's offers. |
| `competitors` | array of [offer](#offer), at most 5 | The other sellers' offers, in Amazon's order. |
| `numberOfOffers` | integer or null | Every offer on the ASIN, all conditions and channels. |
| `sellersChanged` | boolean or null | The sellers on the ASIN differ from the previous message about it. `true` on the first message. |
| `buyBoxWinnerChanged` | boolean or null | The Buy Box winner differs from the previous message about it. `true` on the first message. |
```json
{
"text": "ASIN B0EXAMPLE05 on US: 1 other seller: A2EXAMPLEOTHER 19.99 USD FBM, Buy Box, 95% of 120 · you 21.49 USD FBA, 99% of 812 · OfferChangeType=External · BuyBoxPrice=19.99 USD · NumberOfOffers=new Merchant 1,new Amazon 1",
"severity": "warning",
"sku": null,
"asin": "B0EXAMPLE05",
"changeType": "External",
"buyBox": {
"price": { "amount": 19.99, "currencyCode": "USD" },
"sellerId": "A2EXAMPLEOTHER",
"isYours": false
},
"yourOffer": {
"sellerId": "A1EXAMPLESELLER",
"price": { "amount": 21.49, "currencyCode": "USD" },
"shipping": { "amount": 0.0, "currencyCode": "USD" },
"fulfillment": "FBA",
"isBuyBoxWinner": false,
"feedbackRating": 99,
"feedbackCount": 812
},
"competitors": [
{
"sellerId": "A2EXAMPLEOTHER",
"price": { "amount": 19.99, "currencyCode": "USD" },
"shipping": { "amount": 0.0, "currencyCode": "USD" },
"fulfillment": "FBM",
"isBuyBoxWinner": true,
"feedbackRating": 95,
"feedbackCount": 120
}
],
"numberOfOffers": 2,
"sellersChanged": true,
"buyBoxWinnerChanged": true
}
```
### Business offers (B2B) [#business-offers]
`B2B_ANY_OFFER_CHANGED` — as [Competing offers](#competing-offers), over the business (B2B) offers on the ASIN. No `changeType`, `sellersChanged` or `buyBoxWinnerChanged`.
| Field | Type | What it is |
| ---------------- | ----------------------------------- | ----------------------------------------------------- |
| `buyBox` | [buy box](#buy-box) or null | The B2B Buy Box price and who holds it. |
| `yourOffer` | [offer](#offer) or null | Your own B2B offer, when it is among Amazon's offers. |
| `competitors` | array of [offer](#offer), at most 5 | The other sellers' B2B offers, in Amazon's order. |
| `numberOfOffers` | integer or null | Every B2B offer on the ASIN. |
### Fee promotions [#fee-promotions]
`FEE_PROMOTION` — a fee promotion Amazon offers you: what it is, when it runs, and its first discount. `sku` or `asin` is set when it names exactly one item.
| Field | Type | What it is |
| ------------------ | ----------------------- | -------------------------------------------------------------------- |
| `promotionType` | string or null | Amazon's FeePromotionType. |
| `description` | string or null | Amazon's description of the promotion (FeePromotionTypeDescription). |
| `effectiveFrom` | date-time or null | When it starts. |
| `effectiveThrough` | date-time or null | When it ends. |
| `feeType` | string or null | The fee it discounts, for example `ReferralFee`. |
| `discountType` | string or null | Amazon's FeeDiscountType, for example `PERCENTAGE`. |
| `discountValue` | number or null | Amazon's FeeDiscountValue. |
| `discountAmount` | [money](#money) or null | The discount as an amount, when Amazon gives one. |
### Order changes [#order-changes]
`ORDER_CHANGE` — the order's status now and what changed. `sku` is set when the order holds one SKU.
| Field | Type | What it is |
| ---------------------- | --------------- | ------------------------------------------------------------------------------------------- |
| `amazonOrderId` | string or null | The order. |
| `changeType` | string or null | Amazon's OrderChangeType: `BuyerRequestedChange`, `OrderStatusChange`, `DeliveryTipChange`. |
| `changeReason` | string or null | Amazon's ChangeReason, for example `Buyer Requested Cancel`. |
| `orderStatus` | string or null | The order's status now, for example `Unshipped`. |
| `fulfillmentType` | string or null | `AFN` (FBA) or `MFN` (FBM). |
| `buyerRequestedCancel` | boolean or null | An item of the order says the buyer asked to cancel. |
| `sellerSkus` | array of string | The order's SKUs. |
### Multi-Channel Fulfillment orders [#mcf-orders]
`FULFILLMENT_ORDER_STATUS` — a Multi-Channel Fulfillment order, its packages and tracking. Amazon names no marketplace. `sku` is set when the order holds one SKU.
| Field | Type | What it is |
| ------------ | ---------------------------------------- | -------------------------------------------------------------------------------------- |
| `orderId` | string or null | The fulfillment order. |
| `eventType` | string or null | Amazon's eventType, for example `ORDER_STATUS_CHANGED`. |
| `status` | string or null | `PROCESSING`, `COMPLETE`, `COMPLETE_PARTIAL`, `CANCELLED`, `UNFULFILLABLE`, `INVALID`. |
| `sellerSkus` | array of string | The order's SKUs. |
| `packages` | array of [package](#package), at most 20 | The packages of its shipments, with the carrier's tracking. |
### FBA Onsite shipments (Brazil) [#fba-onsite-shipments]
`FBA_OUTBOUND_SHIPMENT_STATUS` — a shipment Amazon created or cancelled for an order. Brazil only.
| Field | Type | What it is |
| ------------------ | -------------- | -------------------------------------------------- |
| `amazonOrderId` | string or null | The order. |
| `amazonShipmentId` | string or null | The shipment. |
| `shipmentStatus` | string or null | Amazon's ShipmentStatus: `Created` or `Cancelled`. |
### External fulfillment shipments [#external-shipments]
`EXTERNAL_FULFILLMENT_SHIPMENT_STATUS_CHANGE` — a shipment of your own fulfillment location changed status. Amazon names no marketplace.
| Field | Type | What it is |
| ---------------- | -------------- | ----------------------------------------------------- |
| `shipmentId` | string or null | The shipment. |
| `shipmentStatus` | string or null | Its status now, for example `CREATED` or `CANCELLED`. |
| `channelName` | string or null | Amazon's channelName. |
| `locationId` | string or null | Your fulfillment location. |
### FBA inventory [#fba-inventory]
`FBA_INVENTORY_AVAILABILITY_CHANGES` — a SKU's FBA quantities, summed over every marketplace Amazon lists, and per marketplace. The message's marketplace is the first one listed.
| Field | Type | What it is |
| --------------- | -------------------------------------------------------- | ---------------------------------------------- |
| `fnsku` | string or null | Amazon's FNSKU. |
| `fulfillable` | integer or null | Fulfillable units; `0` is out of stock at FBA. |
| `inbound` | integer or null | Working + shipped + receiving. |
| `reserved` | integer or null | Every reserved quantity. |
| `unfulfillable` | integer or null | Unfulfillable units. |
| `marketplaces` | array of [marketplace inventory](#marketplace-inventory) | The same counts per marketplace. |
### Hourly inventory [#hourly-inventory]
`ITEM_INVENTORY_EVENT_CHANGE` — one hour's highly available inventory, summed over every ASIN Amazon lists. `asin` is set when it lists one.
| Field | Type | What it is |
| -------------------------- | ----------------- | ------------------------------------- |
| `startTime` | date-time or null | The start of the hour. |
| `endTime` | date-time or null | The end of the hour. |
| `asinCount` | integer or null | How many ASINs Amazon listed. |
| `highlyAvailableInventory` | integer or null | Highly available inventory, in units. |
### Hourly sales [#hourly-sales]
`ITEM_SALES_EVENT_CHANGE` — one hour's ordered units and revenue, summed over every ASIN Amazon lists. `asin` is set when it lists one.
| Field | Type | What it is |
| ---------------- | ------------------------ | ---------------------------------------- |
| `startTime` | date-time or null | The start of the hour. |
| `endTime` | date-time or null | The end of the hour. |
| `asinCount` | integer or null | How many ASINs Amazon listed. |
| `orderedUnits` | integer or null | Units ordered. |
| `orderedRevenue` | array of [money](#money) | Revenue ordered, one entry per currency. |
### Hourly page views [#hourly-page-views]
`DETAIL_PAGE_TRAFFIC_EVENT` — one hour's detail page views, summed over every ASIN Amazon lists. `asin` is set when it lists one.
| Field | Type | What it is |
| ------------- | ----------------- | ----------------------------------------- |
| `startTime` | date-time or null | The start of the hour. |
| `endTime` | date-time or null | The end of the hour. |
| `asinCount` | integer or null | How many ASINs Amazon listed. |
| `glanceViews` | integer or null | Detail page views (Amazon's GlanceViews). |
### Transactions [#transactions]
`TRANSACTION_UPDATE` — a transaction posted to your account.
| Field | Type | What it is |
| -------------------- | ----------------------- | --------------------------------------------------------- |
| `transactionType` | string or null | Amazon's TransactionType, for example `Shipment`. |
| `postedDate` | date-time or null | When it was posted. |
| `totalAmount` | [money](#money) or null | Its total. |
| `accountType` | string or null | Amazon's AccountType, for example `PAYABLE`. |
| `relatedIdentifiers` | object of string | Amazon's RelatedIdentifiers, name → value (`OrderId`, …). |
### Account health [#account-health]
`ACCOUNT_STATUS_CHANGED` — the seller account's status. No item; the message's `store` is your store in its first marketplace.
| Field | Type | What it is |
| ---------------- | -------------- | ------------------------------------- |
| `previousStatus` | string or null | `NORMAL`, `AT_RISK` or `DEACTIVATED`. |
| `currentStatus` | string or null | `NORMAL`, `AT_RISK` or `DEACTIVATED`. |
```json
{
"text": "Account at risk · PreviousAccountStatus=NORMAL · CurrentAccountStatus=AT_RISK",
"severity": "warning",
"sku": null,
"asin": null,
"previousStatus": "NORMAL",
"currentStatus": "AT_RISK"
}
```
### Report finished [#report-finished]
`REPORT_PROCESSING_FINISHED` — a report request finished. It includes the reports SellerSheet requests to keep your store's data in sync. Amazon names no marketplace.
| Field | Type | What it is |
| ------------------ | -------------- | ---------------------------------------------------------------------------------- |
| `reportId` | string or null | The report. |
| `reportType` | string or null | Amazon's reportType. |
| `processingStatus` | string or null | `DONE`, `CANCELLED` (Amazon had no data, or the request was cancelled) or `FATAL`. |
| `reportDocumentId` | string or null | The document to download, on `DONE`. |
### Feed finished [#feed-finished]
`FEED_PROCESSING_FINISHED` — a feed finished. Amazon names no marketplace.
| Field | Type | What it is |
| ---------------------- | -------------- | ---------------------------------------------------- |
| `feedId` | string or null | The feed. |
| `feedType` | string or null | Amazon's feedType, for example `JSON_LISTINGS_FEED`. |
| `processingStatus` | string or null | `DONE`, `CANCELLED` or `FATAL`. |
| `resultFeedDocumentId` | string or null | The processing report's document, on `DONE`. |
### Data Kiosk query finished [#data-kiosk-query-finished]
`DATA_KIOSK_QUERY_PROCESSING_FINISHED` — a Data Kiosk query finished. Amazon names no marketplace.
| Field | Type | What it is |
| ------------------ | -------------- | --------------------------------------------------------- |
| `queryId` | string or null | The query. |
| `processingStatus` | string or null | `DONE`, `CANCELLED` or `FATAL`. |
| `dataDocumentId` | string or null | The data document; `null` when the query matched no data. |
| `errorDocumentId` | string or null | The error document, on `FATAL`. |
| `nextToken` | string or null | Set when the result has more pages. |
## Objects [#objects]
### money [#money]
| Field | Type | Required | What it is |
| -------------- | -------------- | -------- | -------------------------------- |
| `amount` | number | yes | The amount. |
| `currencyCode` | string or null | no | The currency, for example `USD`. |
### offer [#offer]
| Field | Type | Required | What it is |
| ---------------- | ----------------------- | -------------------- | ----------------------------- |
| `sellerId` | string | yes | Amazon's seller ID. |
| `price` | [money](#money) or null | no | The listing price. |
| `shipping` | [money](#money) or null | no | The shipping price. |
| `fulfillment` | `FBA` · `FBM` or null | no | Who ships it. |
| `isBuyBoxWinner` | boolean | no (default `false`) | This offer holds the Buy Box. |
| `feedbackRating` | integer or null | no | Positive feedback, percent. |
| `feedbackCount` | integer or null | no | Number of ratings. |
### buy box [#buy-box]
| Field | Type | Required | What it is |
| ---------- | ----------------------- | -------- | ----------------------------------------------------------------- |
| `price` | [money](#money) or null | no | The Buy Box landed price. |
| `sellerId` | string or null | no | The seller holding it, when one of the offers Amazon listed does. |
| `isYours` | boolean or null | no | You hold the Buy Box. |
### package [#package]
| Field | Type | Required | What it is |
| ---------------- | -------------- | -------- | ------------------------------------ |
| `packageId` | string or null | no | The package. |
| `status` | string or null | no | Its status, for example `DELIVERED`. |
| `carrierCode` | string or null | no | The carrier, for example `FEDEX`. |
| `trackingNumber` | string or null | no | The carrier's tracking number. |
### marketplace inventory [#marketplace-inventory]
| Field | Type | Required | What it is |
| --------------- | -------------- | ---------------- | ------------------------------- |
| `marketplaceId` | string or null | no | Amazon's marketplace ID. |
| `countryCode` | string or null | no | The marketplace's country code. |
| `fulfillable` | integer | no (default `0`) | Fulfillable units. |
| `inbound` | integer | no (default `0`) | Working + shipped + receiving. |
| `reserved` | integer | no (default `0`) | Every reserved quantity. |
| `unfulfillable` | integer | no (default `0`) | Unfulfillable units. |
## Validating [#validating]
Any JSON Schema draft 2020-12 validator can check a body against [webhooks-v1.json](https://sellersheetai.com/schemas/webhooks-v1.json). The schema types `summary` by `messageType` (one "if `messageType` is this type, then `summary` is this shape" rule per notification), so a validator checks each message's summary against its own type.
# Webhooks (https://sellersheetai.com/help/app/settings/webhooks)
> Amazon's notifications about your stores — listings, prices and offers, orders, inventory, sales, finance, account health and more — delivered to your team chat, or to your own system as signed JSON.
* Amazon tells SellerSheet when something changes on your listings, prices, offers, orders, inventory or account. A **webhook** passes each message on: as a card in your team chat (Feishu / Lark, Slack, Microsoft Teams, WeCom, DingTalk), or as signed JSON to your own system over HTTPS.
* **Choose from 23 of Amazon's notifications**, in groups; a new webhook starts with six. Hourly metrics and per-change streams go to HTTPS only.
* Set it up in **Settings → Webhooks → Add webhook** (workspace owner or admin), then click **Send test**.
* **500 delivered messages a month are free on every plan.** Beyond them, each delivered message is paid from your Credits. Test, failed and skipped messages are never billed.
## What webhooks are for [#what-for]
Amazon sends a notification when something changes on your seller account: a listing is suppressed or becomes buyable again, your offer loses the featured offer on price, someone edits your brand's detail page, another seller joins your ASIN, a buyer asks to cancel an order, your FBA stock runs out, your account goes at risk. A webhook delivers those messages where your work happens:
* **A team chat group.** One card a minute at most, the changes grouped by store, with Amazon's own field names so a person — or an AI agent in the group — can act on them.
* **Your own system.** An ERP, a database or your own code receives every message as signed JSON with Amazon's notification inside, unchanged.
Every message is built only from what Amazon sent; SellerSheet makes no Amazon call to add to it. Amazon is the source of truth.
## Add a webhook [#add-a-webhook]
You need to be the **owner or an admin** of the workspace. Webhooks belong to the workspace you are in: switch to the right one first.
### Get the address [#get-the-address]
Follow the steps for your destination under [Destinations](#destinations) and copy the address. For HTTPS, also make up a signing secret.
### Add the webhook [#add-the-webhook]
In the [SellerSheet app](https://sellersheetai.com/home), open **Settings → Webhooks → Add webhook**:
* **Destination type**: Feishu, Slack, Microsoft Teams, WeCom, DingTalk or HTTPS. It cannot be changed later.
* **Name**: unique in the workspace, for example *ERP feed* or *Ops group*.
* The address, and the **Signing secret** where the destination has one.
* Chat apps only: **Language** — 中文 or English, the language of the cards in the group. A new webhook starts on the language you use the app in; change it any time. See [Card language](#card-language).
* **Notifications and stores**: which notifications, for which stores. The six original notifications start ticked. See [Choose notifications and stores](#types-and-stores).
* **Include marketplaces not connected to SellerSheet** (on by default).
* Chat apps only: **Competing offers: only when the sellers or the Buy Box winner change** (on by default). A price-only change is then filtered — not posted and not billed.
* Tick the per-message pricing box, then **Create webhook**.
A webhook can be created, or turned back on, only while your organization can pay for its next message: free messages left this month, or Credits.
### Send a test [#send-a-test]
Click **Send test** on the webhook's row (or in its edit panel). One sample message for each notification the webhook takes, for a made-up store, arrives at the destination; on a chat app the card title ends in "· test" ("· 测试" when the webhook's language is 中文). If the destination refuses them, its answer is shown — see [Troubleshooting](#troubleshooting). Test messages are never billed.
After that, the list shows each webhook's **Status**, **This month** (messages delivered) and **Last delivery**. **Edit webhook** changes everything but the destination type; a blank address or secret keeps the saved one, and **Enabled** turns the webhook on or off. **Delete webhook** stops it at once; its delivery log stays for 30 days. A workspace keeps up to **10 webhooks**.
The address and the secret are stored encrypted and never shown again: the list shows only the address's last four characters.
### Destinations [#destinations]
| Destination | What arrives | Signing secret |
| --------------- | ------------------------------------------- | ------------------------------------------ |
| Feishu / Lark | One interactive card a minute at most | Optional — Feishu's signature verification |
| Slack | One message a minute at most | — |
| Microsoft Teams | One Adaptive Card a minute at most | — |
| WeCom | One markdown message a minute at most | — |
| DingTalk | One markdown message a minute at most | Optional — DingTalk's 加签 (Sign) |
| HTTPS | Signed JSON, up to 100 messages per request | **Required** |
A chat bot with keyword security needs the keyword `SellerSheet` — every card title contains it. A bot or an endpoint with an IP allowlist needs SellerSheet's IP address: [contact support](/help/contact) for it.
#### Feishu / Lark [#feishu]
1. In the group, open **Settings → Bots → Add bot → Custom bot**.
2. Copy its webhook address: `https://open.feishu.cn/open-apis/bot/v2/hook/…` (Lark: `https://open.larksuite.com/open-apis/bot/v2/hook/…`).
3. Optional security: turn on **signature verification** and paste the secret into **Signing secret**, or turn on **keyword** security with the keyword `SellerSheet`.
#### Slack [#slack]
1. In your Slack app, turn on **Incoming Webhooks**.
2. Click **Add New Webhook** and pick the channel.
3. Copy the URL: `https://hooks.slack.com/services/…`
#### Microsoft Teams [#teams]
1. In the channel, open **Workflows**.
2. Choose **Post to a channel when a webhook request is received** and finish the workflow.
3. Copy the URL it gives you; its host ends in `logic.azure.com` or `powerplatform.com`.
#### WeCom [#wecom]
1. In the group, open **··· → Group robots → Add**.
2. Copy its webhook address: `https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=…`
WeCom takes shorter messages than the other apps, so its card holds fewer lines before "+N more".
#### DingTalk [#dingtalk]
1. In the group settings, open **Bots → Add bot → Custom**.
2. Under security, choose **加签 (Sign)** and paste the secret that starts with `SEC` into **Signing secret**, or choose **custom keyword** `SellerSheet`.
3. Copy the address: `https://oapi.dingtalk.com/robot/send?access_token=…`
#### HTTPS [#https]
1. Have an endpoint that accepts a `POST` with a JSON body, on an `https://` address on the public internet (port 443). Private and internal addresses are refused, and redirects are not followed. The address is checked again before every request.
2. Make up a long random signing secret (for example the output of `openssl rand -hex 32`), paste it into **Signing secret** and keep it in your receiver.
3. In your receiver, [verify the signature](#verify-signature) of every request, answer any `2xx` within 10 seconds, then process the messages.
What arrives: [The HTTPS body](#https-body).
## Choose notifications and stores [#types-and-stores]
The **Notifications and stores** table lists every notification Amazon offers, in groups: a row per notification and a column per store.
* Tick **All stores** to take every store of the workspace, including the stores you connect later, or tick stores one by one.
* **A new webhook starts with the six original notifications ticked** — Listing issues, Listing status, Brand content, Pricing health, Competing offers and Account health — on all stores, except Brand content, which starts on one store. Tick any other row you want.
* **Grey rows cannot be ticked**, and say why: *Coming as data in your report tables — not as webhooks* (Amazon Ads), *Not available yet* (shipment tracking milestones), or *HTTPS only* on a chat destination. See [The notifications](#notifications).
* **High volume** marks, on HTTPS, the hourly metrics and the notifications with a message for every change: a busy store can send many a day, and each delivered message counts toward [your usage](#pricing).
* **Some notifications are sent for some marketplaces only:** FBA Onsite shipments, for Brazil (*BR only*). A store without Brazil cannot be ticked for it. **All stores** is always allowed: Amazon sends nothing for the other stores.
* **One copy per store:** Amazon sends **Brand content** and **Product type definitions** once for each store of a seller, and the content is the same across them. Tick one store to get each change once; with more, you get one copy per store, and the table warns you.
* **Messages that name no marketplace** — account health, reports, feeds, Data Kiosk queries, Multi-Channel Fulfillment orders, self-fulfilled quantity, external fulfillment shipments — reach a webhook that takes the notification on any store of that seller.
* **A chat destination leaves HTTPS-only ticks out.** If you ticked some before choosing a chat app, the form says how many are left out; they are not saved.
* **Include marketplaces not connected to SellerSheet**: some notifications cover your whole seller account, so a message can be about a marketplace you have not connected to SellerSheet. With the box on, those messages arrive, marked "(not connected)" on a card and `"connected": false` over HTTPS. Turn it off to drop them.
### Amazon subscriptions follow your webhooks [#amazon-subscriptions]
SellerSheet asks Amazon for exactly the notifications your webhooks want, and nothing else:
* One Amazon subscription per seller account, region and notification serves every webhook. A new webhook on a store and notification that is already subscribed starts receiving at once.
* A notification no webhook wants yet is subscribed at Amazon within about a minute.
* When no active webhook has wanted a notification of a store for 24 hours, SellerSheet unsubscribes it at Amazon. If a webhook wants it again, it is subscribed again within about a minute. What Amazon published while it was unsubscribed is not sent.
* A small marker on a store's cell explains a subscription that is ending (*Amazon's subscription ends … unless a webhook takes it again.*) or one Amazon refused: *another application holds this notification for the seller*; *this notification needs a permission the store's authorization does not include* (SellerSheet tries again daily — if it keeps failing, re-authorize the store or contact support); or *SellerSheet tries again*.
## The notifications [#notifications]
The Webhooks page lists the notifications Amazon's Selling Partner API sends that SellerSheet can deliver, and Amazon Ads' two Marketing Stream datasets, in 9 groups:
* **Delivered now — 23 notifications.** The original six are ticked on a new webhook (*default* below).
* **Not available yet — Shipment tracking milestones.** Amazon needs each shipment registered first.
* **Amazon Ads — not webhooks.** Ads performance arrives as data in your report tables (Amazon Marketing Stream), so the two rows are grey on every destination.
On a chat destination, an HTTPS-only notification is grey too, with its reason. On HTTPS those rows can be ticked, and the hourly metrics and the ones with a message for every change are marked **High volume**.
Not offered: Amazon's three Brazil and Mexico tax invoice notifications. Amazon allows them only to apps it has granted a tax-invoicing role, and the SellerSheet app does not have that role.
### Listings [#group-listings]
| Notification | What it tells you | Delivered | Channels |
| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | ------------- | --------------------------------------- |
| Listing issues | The issues on a listing change: the severities and enforcement actions now in force, or all clear. Never the issue text. | Now (default) | HTTPS, chat |
| Listing status | A listing becomes buyable or not, shows in search or not, or is deleted. | Now (default) | HTTPS, chat |
| Brand content | An attribute of a catalog item of your brand changes — title, bullets, images and so on. One copy per store. | Now (default) | HTTPS, chat |
| Product type change | An ASIN's product type changes; what its listings must say may change with it. | Now | HTTPS, chat |
| Self-fulfilled quantity | A SKU's self-fulfilled quantity changes. | Now | HTTPS only — a message for every change |
| Product type definitions | Amazon publishes a new version of a marketplace's product type definitions, naming any new product types. One copy per store. | Now | HTTPS only — a signal for your own code |
### Pricing & offers [#group-pricing]
| Notification | What it tells you | Delivered | Channels |
| --------------------- | ---------------------------------------------------------------------------------------------------------------- | ------------- | --------------------------------------- |
| Pricing health | Your offer cannot be the featured offer because of its price, with Amazon's reference prices. ASIN only, no SKU. | Now (default) | HTTPS, chat |
| Competing offers | The offers on an ASIN you sell change while another seller is on it: the Buy Box, prices, sellers. | Now (default) | HTTPS, chat |
| Business offers (B2B) | The same for the business (B2B) offers on an ASIN. | Now | HTTPS only — a message for every change |
| Fee promotions | Amazon offers you a fee promotion: what it is, when it runs, the discount. | Now | HTTPS, chat |
### Orders & fulfillment [#group-orders]
| Notification | What it tells you | Delivered | Channels |
| -------------------------------- | --------------------------------------------------------------------------------- | --------- | ----------- |
| Order changes | An order's status changes, or the buyer asks for a change such as a cancellation. | Now | HTTPS, chat |
| Multi-Channel Fulfillment orders | A Multi-Channel Fulfillment order's status, packages and tracking. | Now | HTTPS, chat |
| FBA Onsite shipments (Brazil) | Amazon creates or cancels a shipment for an order. *BR only.* | Now | HTTPS, chat |
| External fulfillment shipments | A shipment from your own fulfillment location changes status. | Now | HTTPS, chat |
| Shipment tracking milestones | A shipment's carrier tracking milestones. | Not yet | HTTPS, chat |
### Inventory [#group-inventory]
| Notification | What it tells you | Delivered | Channels |
| ---------------- | ------------------------------------------------------------------------------------------------ | --------- | --------------------------------------- |
| FBA inventory | A SKU's FBA quantities change — fulfillable, inbound, reserved, unfulfillable — per marketplace. | Now | HTTPS only — a message for every change |
| Hourly inventory | Each hour: your highly available inventory, in units. | Now | HTTPS only — hourly metrics |
### Sales & traffic [#group-sales]
| Notification | What it tells you | Delivered | Channels |
| ----------------- | ------------------------------------- | --------- | --------------------------- |
| Hourly sales | Each hour: ordered units and revenue. | Now | HTTPS only — hourly metrics |
| Hourly page views | Each hour: detail page views. | Now | HTTPS only — hourly metrics |
### Finance [#group-finance]
| Notification | What it tells you | Delivered | Channels |
| ------------ | ----------------------------------------------------------------------------------------- | --------- | --------------------------------------- |
| Transactions | A transaction posts to your account: its type, amount and related IDs, such as the order. | Now | HTTPS only — a message for every change |
### Account [#group-account]
| Notification | What it tells you | Delivered | Channels |
| -------------- | ---------------------------------------------------------------------------- | ------------- | ----------- |
| Account health | The seller account's status changes between normal, at risk and deactivated. | Now (default) | HTTPS, chat |
### Reports & data — for developers [#group-data]
| Notification | What it tells you | Delivered | Channels |
| ------------------------- | -------------------------------------------------------------------------------------------- | --------- | --------------------------------------- |
| Report finished | A report request finishes — done, cancelled or fatal — with the report's ID and document ID. | Now | HTTPS only — a signal for your own code |
| Feed finished | A feed finishes — done, cancelled or fatal — with its result document ID. | Now | HTTPS only — a signal for your own code |
| Data Kiosk query finished | A Data Kiosk query finishes, with its data or error document ID. | Now | HTTPS only — a signal for your own code |
### Amazon Ads — Marketing Stream [#group-ads]
| Dataset | What it holds | Delivered | Channels |
| -------------------------- | --------------------------------------------------------------------------- | --------------------------------------------- | -------- |
| Ads performance (hourly) | Each hour: impressions, clicks, spend, conversions and sales, per campaign. | As data in your report tables — not a webhook | — |
| Converted products (daily) | Each day: the products bought after an ad. | As data in your report tables — not a webhook | — |
Every message's `summary` has a readable `text` and a `severity`, plus the fields of its notification. Amazon's code for each notification (`messageType`) and its fields: [Webhook message schema](/help/app/settings/webhooks-schema).
### What you will see [#amazon-behaviour]
* **When messages arrive.** Listing issues and Listing status come about 11–19 minutes after the change; Pricing health and Brand content within about a minute. Of the six defaults, Competing offers is usually the busiest.
* **Issues cleared after a delete.** About 20 minutes after you delete a SKU, Amazon clears its issues; that message is delivered like any other.
* **The last competitor leaving.** Amazon notifies only while another seller is on the ASIN, so the moment the last one leaves produces no message.
* **Report finished includes SellerSheet's own reports:** the ones it requests to keep your store's data in sync, many a day.
* **Use a message as confirmation.** When you change a listing, a price or brand content, the message tells you Amazon has applied it.
### Severity and colour [#severity]
| `severity` | Card colour | When |
| ---------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `critical` | Red | A listing suppressed or its catalog item removed; the account deactivated; an order that cannot be fulfilled |
| `warning` | Orange | Other listing issues; a listing not buyable or deleted; a product type changed; pricing health; another seller holds the Buy Box; the account at risk; out of stock, self-fulfilled or at FBA; a buyer asks to cancel, or an order is cancelled; a fulfillment order partly complete or cancelled; a shipment cancelled; a report, feed or Data Kiosk query cancelled or failed |
| `info` | Blue | Everything else — for example brand content, competing offers where you hold the Buy Box or nobody does, hourly metrics, transactions, fee promotions, a finished report |
| `recovery` | Green | Issues cleared; a listing buyable again; the account back to normal; a Multi-Channel Fulfillment order complete |
## What a chat card shows [#chat-card]
```text
SellerSheet Webhooks · myStore · 3 messages
myStore-US (3)
• Listing issues · SKU SKU-EXAMPLE-01 · B0EXAMPLE01 — Listing not buyable (suppressed) · Severities=ERROR · EnforcementActions=LISTING_SUPPRESSED
• Listing status · SKU SKU-EXAMPLE-02 · B0EXAMPLE02 — Buyable · Status=BUYABLE,DISCOVERABLE
• Competing offers · B0EXAMPLE05 — 1 other seller: A2EXAMPLEOTHER 19.99 USD FBM, Buy Box, 95% of 120 · you 21.49 USD FBA, 99% of 812 · OfferChangeType=External · BuyBoxPrice=19.99 USD · NumberOfOffers=new Merchant 1,new Amazon 1
Amazon sent 02:28 (changed 02:14) GMT-7 · What these mean
```
* **One card a minute at most.** The first message opens a one-minute window; every message that arrives in it goes on the same card. (A window that reaches 2,000 messages sends its card at once.)
* **Title:** `SellerSheet Webhooks`, the store names (up to two, else the number of stores) and the number of messages.
* **Colour:** the worst [severity](#severity) on the card.
* **Sections:** one per store ref, for example `myStore-US`; "(not connected)" marks a marketplace you have not connected.
* **Lines:** the notification, the SKU and ASIN (the ASIN links to the product page on that marketplace), plain words, then Amazon's own field names and values as `Field=VALUE`, so an AI agent in the group can act on the exact codes. A competing seller's ID links to its storefront, which shows its name; up to 5 sellers are listed, then "+N more".
* **Repeats:** identical messages — the same store, notification, text and change time — are one line ending `×N`. Each was delivered, and counts.
* **Long cards:** after 40 lines, or the chat app's size limit, the card ends with "+N more — open the delivery log", a link to this webhook's [delivery log](#delivery-log). Every message the card carries, shown or not, was delivered.
* **Footer:** when Amazon sent the messages and, in brackets, when the changes happened (with the date if that was an earlier day), in the first store's marketplace time — then **What these mean**, a link to this section.
### Card language [#card-language]
Each chat webhook has a **Language**: English or 中文. Everything SellerSheet writes on the card follows it — the message count, the notification names, the plain words, "(not connected)", "+N more" and the footer, whose **What these mean** then opens the Chinese version of this section. Amazon's field names and values (`Severities=ERROR`, `competitivePriceThreshold=24.99 USD`), SKUs, ASINs, seller IDs and prices stay exactly as Amazon sends them, so an AI agent in the group reads the same codes in either language. The same card in 中文:
```text
SellerSheet Webhooks · myStore · 3 条消息
myStore-US (3)
• 商品问题 · SKU SKU-EXAMPLE-01 · B0EXAMPLE01 — 商品不可购买(被禁止显示) · Severities=ERROR · EnforcementActions=LISTING_SUPPRESSED
• 商品状态 · SKU SKU-EXAMPLE-02 · B0EXAMPLE02 — 可购买 · Status=BUYABLE,DISCOVERABLE
• 竞争报价 · B0EXAMPLE05 — 1 个其他卖家:A2EXAMPLEOTHER 19.99 USD FBM,购物车,好评率 95%(120 条) · 你 21.49 USD FBA,好评率 99%(812 条) · OfferChangeType=External · BuyBoxPrice=19.99 USD · NumberOfOffers=new Merchant 1,new Amazon 1
亚马逊 02:28 发送(02:14 变更)GMT-7 · 各项含义
```
HTTPS has no language: its JSON carries Amazon's notification unchanged.
## The HTTPS body [#https-body]
Each request is a `POST` with `Content-Type: application/json` and these headers:
| Header | Value |
| --------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `X-SellerSheet-Webhook-Id` | The webhook's ID |
| `X-SellerSheet-Delivery-Id` | The delivery's ID — the same on every try |
| `X-SellerSheet-Timestamp` | Unix seconds when this try was sent |
| `X-SellerSheet-Signature` | `sha256=` and the hex HMAC-SHA256, keyed with your signing secret, of the timestamp, a `.` and the raw body |
| `X-SellerSheet-Test` | `true` on a **Send test**, else `false` |
The body is one **delivery**: up to 100 messages, at most 1 MB. A request goes when 100 messages are waiting, or 2 seconds after the first one arrived. An example with one message, made-up values:
```json
{
"deliveryId": "dlv_8f3a1c9e2b7d4e6fa0b1c2d3e4f5a6b7",
"webhookId": "0c6f2a8e-4d1b-4e7a-9b35-6e8d2f1a4c90",
"organizationId": "7b2e9c41-0d3a-4f6b-8e15-9c2a4d6f8b30",
"sentAt": "2026-10-27T09:28:33Z",
"attempt": 1,
"schemaVersion": 1,
"messages": [
{
"messageId": "5c0e8f4a-2b7d-4e91-a3c6-000000000001",
"messageType": "LISTINGS_ITEM_ISSUES_CHANGE",
"fingerprint": "sha256:af6e358a51bec4bc1275fba29469312dce87aa4609a42c42564a35c8c190d1a5",
"store": {
"storeId": "3f6c2a9e-5b1d-4c8e-9a7f-2d4e6b8c0a11",
"ref": "myStore-US",
"sellerId": "A1EXAMPLESELLER",
"marketplaceId": "ATVPDKIKX0DER",
"countryCode": "US",
"connected": true
},
"eventTime": "2026-10-27T09:14:03Z",
"publishTime": "2026-10-27T09:28:30Z",
"receivedAt": "2026-10-27T09:28:32Z",
"summary": {
"text": "SKU SKU-EXAMPLE-01 (B0EXAMPLE01) on US: Listing not buyable (suppressed) · Severities=ERROR · EnforcementActions=LISTING_SUPPRESSED",
"severity": "critical",
"sku": "SKU-EXAMPLE-01",
"asin": "B0EXAMPLE01",
"severities": ["ERROR"],
"enforcementActions": ["LISTING_SUPPRESSED"],
"cleared": false
},
"amazon": {
"notificationType": "LISTINGS_ITEM_ISSUES_CHANGE",
"notificationVersion": "1.0",
"payloadVersion": "2023-12-13",
"eventTime": "2026-10-27T09:14:03.000Z",
"notificationMetadata": {
"ApplicationId": "amzn1.sp.solution.00000000-0000-4000-8000-000000000000",
"SubscriptionId": "9d4b7e2a-6c1f-4a85-b3e0-000000000001",
"PublishTime": "2026-10-27T09:28:30.000Z",
"NotificationId": "5c0e8f4a-2b7d-4e91-a3c6-000000000001"
},
"payload": {
"Sku": "SKU-EXAMPLE-01",
"Asin": "B0EXAMPLE01",
"SellerId": "A1EXAMPLESELLER",
"MarketplaceId": "ATVPDKIKX0DER",
"Severities": ["ERROR"],
"EnforcementActions": ["LISTING_SUPPRESSED"]
}
}
}
]
}
```
Reading it:
* **The delivery.** `deliveryId` is the same on every try of one request; `attempt` counts the tries (1 to 3). `webhookId` and `organizationId` name the webhook and your workspace. `schemaVersion` is `1`.
* **`messageId`** is Amazon's NotificationId: one Amazon message. **`messageType`** is Amazon's notification type. More types may be added within `schemaVersion` 1: handle one you do not know by its `summary.text`, or skip it.
* **`fingerprint`** is the same for the same change published again by Amazon — see [Repeats](#duplicates).
* **`store`** is your store and the marketplace the message is about: `ref` is the store ref (`myStore-US`), and `connected` is `false` for a marketplace you have not connected.
* **Times** are UTC: `eventTime` when the change happened, `publishTime` when Amazon sent it, `receivedAt` when SellerSheet received it.
* **`summary`** is SellerSheet's reading: a readable `text`, a [`severity`](#severity), `sku`, `asin` and the fields of its notification type.
* **`amazon`** is Amazon's notification, every value exactly as Amazon sent it — the source of truth. Amazon spells the keys in PascalCase for some notifications and camelCase for others: read a key in either casing.
* Every key is always sent; one with no value is `null`. Objects are not closed: ignore a key you do not know.
The JSON Schema (2020-12) of the body is published at [sellersheetai.com/schemas/webhooks-v1.json](https://sellersheetai.com/schemas/webhooks-v1.json), with one sample delivery per notification at [sellersheetai.com/schemas/webhooks-v1-samples.json](https://sellersheetai.com/schemas/webhooks-v1-samples.json). Every field, type and example: [Webhook message schema](/help/app/settings/webhooks-schema).
A **Send test** carries `X-SellerSheet-Test: true` and one sample message for each notification the webhook takes, for the made-up store `SampleStore`. Answer it like any other request, but do not act on its messages.
## Verify the signature [#verify-signature]
Check every request before you trust it:
1. Read the **raw** body bytes, before any JSON parsing.
2. Refuse a timestamp more than 5 minutes from your clock — a replayed request fails. Each try has a fresh timestamp, so retries pass.
3. Compute HMAC-SHA256 over `timestamp + "." + raw body` with your signing secret as the key, and compare `sha256=` with the header in constant time.
4. On success, answer `2xx` at once and process the messages after; on failure, answer `401`.
```python title="verify.py"
import hashlib, hmac, time
def verify(secret: str, headers, raw_body: bytes, tolerance: int = 300) -> bool:
timestamp = headers.get("X-SellerSheet-Timestamp", "")
signature = headers.get("X-SellerSheet-Signature", "")
if not timestamp.isdigit() or abs(time.time() - int(timestamp)) > tolerance:
return False
mac = hmac.new(secret.encode(), timestamp.encode() + b"." + raw_body, hashlib.sha256)
return hmac.compare_digest("sha256=" + mac.hexdigest(), signature)
```
```js title="verify.mjs"
import { createHmac, timingSafeEqual } from "node:crypto";
// headers: lower-case names, as Node gives them; rawBody: a Buffer of the body as received
export function verify(secret, headers, rawBody, tolerance = 300) {
const timestamp = headers["x-sellersheet-timestamp"] ?? "";
const signature = headers["x-sellersheet-signature"] ?? "";
if (!/^\d+$/.test(timestamp) || Math.abs(Date.now() / 1000 - Number(timestamp)) > tolerance) return false;
const mac = createHmac("sha256", secret).update(`${timestamp}.`).update(rawBody).digest("hex");
const expected = Buffer.from(`sha256=${mac}`);
const given = Buffer.from(signature);
return expected.length === given.length && timingSafeEqual(expected, given);
}
```
In Express, read the raw body with `express.raw({ type: "application/json" })` on the route; in Flask, `request.get_data()`.
## Retries, pause and resume [#retries-and-pause]
* **Tries.** A delivery is tried at once, then again after 20 seconds and after 90 seconds — the same `deliveryId`, the next `attempt`. Each try waits up to 10 seconds for an answer.
* **What fails a try:** an answer other than `2xx` (a redirect included — it is not followed), no answer within 10 seconds, no connection, or a chat app's refusal inside its answer (for example Feishu's `code` or WeCom's `errcode`).
* **A failed delivery.** When all three tries fail, its messages are **Failed**: not billed, and not sent again.
* **Pause.** After **3 failed deliveries in a row** the webhook is **Paused — failing** and the organization's owner and admins get one e-mail. A delivered one in between starts the count again.
* **Resume.** The Webhooks page shows a banner for a paused webhook. **Resume** sends a test message first and turns the webhook back on only if the destination accepts it; otherwise it stays paused and the destination's answer is shown.
* **While paused or off**, nothing is sent and nothing is billed. Messages that arrive meanwhile are recorded as **Skipped** in the delivery log and are not sent later.
* **Paused — no credits.** See [Pricing and usage](#pricing): it turns itself back on.
* **Too slow.** If an HTTPS endpoint falls 2,000 messages behind, new messages for it fail at once ("the webhook answers too slowly") instead of holding up everyone else's.
* To stop a webhook yourself, edit it and untick **Enabled**.
## Repeats and messageId [#duplicates]
Amazon is the source of truth: SellerSheet delivers every message Amazon sends, including Amazon's own repeats, and drops nothing on the way.
* **A retry repeats a delivery.** If your endpoint processed a delivery but answered too late, the next try brings the same `deliveryId` and the same messages. Keep the `messageId`s you have handled for a day or two and drop one you already have.
* **Amazon sometimes publishes the same change again** as a new message — a new `messageId`, the same `eventTime`. Its `fingerprint` is the same, so compare `fingerprint` if you want to act on each change once. On a chat card such repeats are one line `×N`.
* **Brand content** and **Product type definitions** arrive once per store you tick — tick one store to get each change once.
* **Competing offers** on HTTPS: every message arrives, with `sellersChanged` and `buyBoxWinnerChanged` saying whether the sellers on the ASIN or the Buy Box winner changed since the previous message; filter on them if you only want those.
## Pricing and usage [#pricing]
* **500 delivered messages a month are free**, for every organization, on every plan. The count starts again on the 1st of each month (UTC).
* **Beyond the 500**, each delivered message is paid from the organization's Credits, at the price shown on the Webhooks page. Plans and Credits: [Plans and prices](/#pricing) and [Billing & Credits](/help/app/settings/billing).
* **One message delivered to one webhook is one message.** A message two webhooks take counts twice. A chat card counts every message it carries, `×N` lines and "+N more" included.
* **Never billed:** test messages, failed messages, skipped messages (a paused or off webhook), and filtered ones (a chat webhook's competing-offers option).
* **80 %.** When the month reaches 400 messages, the owner gets one e-mail.
* **Out of Credits.** When the month's 500 are used and the Credits run out, the organization's webhooks pause (**Paused — no credits**) and the owner gets an e-mail. They turn themselves back on after a top-up, or at the start of the next month. About a minute of messages may still be delivered after the balance reaches zero; the balance never goes below zero.
* **Where to see it:** the top of the Webhooks page shows this month's messages, what is left of the 500 and the Credits spent on webhooks this month; **Billing & Credits** shows the same in its Credits card; the [Credit ledger](/help/app/settings/billing#ledger) has one line per charge; the delivery log shows each delivery's billable messages.
## The delivery log [#delivery-log]
**Settings → Webhooks → Delivery log** lists every delivery and every message of the last 30 days, newest first. Open it from the button at the top of the Webhooks page, from a webhook's row (**Open its delivery log**, already filtered to that webhook), or from a chat card's "+N more" link.
**Show** switches between two lists:
| List | One row per | Columns |
| -------------- | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Deliveries** | HTTPS request or chat card | **Sent**, **Webhook** (name and type), **Outcome** (with a **Test** tag for a test), **Messages sent**, **Billable** (and "billed" once charged), **HTTP status**, **Tries**, **Error** |
| **Messages** | Amazon message | **Received**, **Notification**, **Store** ("Not a SellerSheet store" when it names none of yours), **SKU / ASIN**, **Webhooks** (its outcome at each webhook, or "No webhook took it") |
Filters, kept in the page address so a filtered view can be bookmarked or shared:
* **Webhook** and **Time** (**Last hour**, **Last 24 hours**, **Last 7 days**, **Last 30 days**) on both lists.
* **Outcome**: **Delivered** or **Failed** on Deliveries; Messages add **Skipped** and **Filtered**.
* Messages only: **Notification**, **Store**, and **Search SKU or ASIN** — an exact SKU, or an ASIN.
* **Reset** clears them. The columns button shows or hides columns.
| Outcome | Meaning |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **Delivered** | The destination accepted it. Billable beyond the month's free 500. |
| **Failed** | Every try failed, or the webhook fell too far behind. Not billed, not sent again. |
| **Skipped** | The webhook was paused or off when the message arrived. Not billed, not sent later. |
| **Filtered** | A chat webhook with **Competing offers: only when the sellers or the Buy Box winner change**, and only a price moved. Not billed. |
**Open** on a message shows its **Message ID**, **Received**, **Event time**, **Store**, **SKU / ASIN**, **Fingerprint**, its outcome at each webhook, and **The message as sent** — the message's JSON exactly as delivered, with **Copy JSON**. The JSON is ready a few minutes after the message arrives (until then the panel asks you to open it again shortly) and is kept 30 days.
## Troubleshooting [#troubleshooting]
**Send test**, the log's **Error** column and the paused banner show the destination's own answer:
| You see | Fix |
| ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------- |
| Feishu 19021 | Signature check failed: paste the secret again, exactly as Feishu shows it — or remove it if the bot does not verify signatures. |
| Feishu 19022 | The bot has an IP allowlist: [contact support](/help/contact) for the IP to allow. |
| Feishu 19024 | Keyword check failed: add the keyword `SellerSheet`. |
| DingTalk 310000 | A security setting refused it: check the keyword `SellerSheet`, the 加签 secret or the IP setting. |
| DingTalk 300001 · WeCom 93000 | The robot's address is no longer valid: copy it again. |
| DingTalk 130101 · WeCom 45009 | The app's rate limit: several webhooks post to the same group. Combine them into one. |
| Slack: invalid_token, no_service | The Slack webhook was removed: create a new one. |
| Teams: … | The workflow refused it: check the workflow in Teams. |
| HTTP 3xx (redirects are not followed) | Use the final address. |
| HTTP 401 / 403 from your endpoint | Your signature check refused it: verify over the raw body, with the secret saved on the webhook. |
| no answer within 10 s | Answer `2xx` first and process after. |
| could not connect | The endpoint is down or not reachable from the internet. |
| That address is not on the public internet | Use a public `https://` address on port 443. |
**A webhook receives nothing:**
* Its status is **Active** — not paused or off.
* The notifications and stores you want are ticked, in the workspace that owns the store.
* **Include marketplaces not connected to SellerSheet** is on, if the change was on a marketplace you have not connected.
* In the delivery log, **Messages** shows whether the message arrived at all and what happened to it at each webhook (**Skipped**, **Filtered**, "No webhook took it").
* A marker on the store's cell in the edit panel says when Amazon refused the subscription. When it names a permission the store's authorization does not include, re-authorize the store on [Stores & Marketplaces](/help/app/settings/stores); if it keeps failing, [contact support](/help/contact).
## FAQ [#faq]
### Who can manage webhooks? [#who-can-manage-webhooks]
The owner or an admin of the workspace. Members do not see the Webhooks page.
### How many webhooks can a workspace have? [#how-many-webhooks-can-a-workspace-have]
Up to 10.
### Why can't I tick some notifications? [#why-cant-i-tick-some-notifications]
A grey row is a notification the webhook cannot take: Amazon Ads (it arrives as data in your report tables, not as webhooks) or shipment tracking milestones (not available yet), or, on a chat destination, one that is HTTPS only — hourly metrics, a message for every change, or a signal for your own code. The row says why.
### What do webhooks cost? [#what-do-webhooks-cost]
Every organization gets 500 delivered messages a month free, on every plan. Each delivered message beyond them is paid from the organization's Credits, at the price shown on the Webhooks page. Test, failed, skipped and filtered messages are never billed.
### Can a webhook send e-mail? [#can-a-webhook-send-e-mail]
No. E-mail is not a destination; use a chat group or an HTTPS endpoint. SellerSheet still sends its own notices by e-mail: to the owner and admins when a webhook pauses after failed deliveries, and to the owner at 80 % of the month's free messages and when Credits run out.
### Do webhooks read my Google Sheets? [#do-webhooks-read-my-google-sheets]
No. Webhooks pass on Amazon's notifications; SellerSheet does not read or write your sheets to send them.
### What happened to SellerSheet Alerts? [#what-happened-to-sellersheet-alerts]
Alerts is now Webhooks. The same notifications and chat apps, plus 17 more of Amazon's notifications, on every plan, up to 10 per workspace, and HTTPS for your own systems.
# Studio (https://sellersheetai.com/help/app/studio)
> The Studio screen and its library.
Studio makes a product's listing content step by step — buyer insights, copy, images and A+ — and publishes the copy and images to the live listing (A+ you copy into your Sheet). Each product has one plan, shared by your team. The **Image Library** keeps every image Studio makes.
A plan has five steps: **Product** → **Buyer insights** → **Copy** → **Images** → **Publish**. It saves itself a moment after each edit.
**Credits.** Every AI action shows its price on its button before you click (**· N credits**). It is billed when it starts and refunded if it fails. Your balance and model route are in the Studio header; top up on [Billing & Credits](/help/app/settings/billing).
**Write access.** Studio reads the live listing from the store you pick. Placing an image on a store's listing slot and sending to Amazon need write access to that store.
## Main steps — make a product's listing content [#main-steps]
### Start a plan [#step-start]
**New plan** → pick the **Product** and the store to **Read the live listing from** → **Create plan**. Or click **Studio** on a row of [Products](/help/app/products).
### 1 · Product [#step-product]
**Refresh** reads the live listing and the top competitors from Amazon. Pick the hero SKU, click the images to use as samples, add competitors by ASIN.
### 2 · Buyer insights (optional) [#step-insights]
**Create report** on what buyers praise and complain about in the category, answer the questions it raises, then **Write brief** — the facts your copy must use.
### 3 · Copy [#step-copy]
Choose what the copy uses (your **Draft** or the **AI Revised** brief), the samples, competitors to learn from, keywords and languages → **Generate copy**. Edit any field in place.
### 4 · Images [#step-images]
**Re-plan** (or **Plan by hand**) sets the images and A+ modules. For each slot, add a reference and samples → **Generate**, then **Select** the version that goes on the listing.
### 5 · Publish [#step-publish]
**Dry run** asks Amazon to check the change without saving it. **Send** changes the live listing, after a confirm that names the SKUs.
## Every control [#controls]
What each control changes:
| Effect | Meaning |
| -------------------------------- | ------------------------------------------------------------------------------- |
| | Reads or opens something — changes nothing on Amazon or noon. |
| Changes SellerSheet | Saved in your SellerSheet workspace only — the plan, your images, your library. |
| | Changes your live Amazon listing. |
| Live on noon | Changes your live noon listing. |
| | Paid from your Credits balance; refunded if it fails. |
### Studio home [#studio-home]
The workspace's plans, 50 per page.
| Control | What it does | Effect |
| -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Continue** | Opens the plan saved last. | |
| Tiles **In progress** · **Ready to publish** · **Published** · **Credits spent** | Counts of plans; Credits spent in the last 30 days. **Ready to publish** and **Published** filter the list. | |
| **All** · **Ready** · **Published** · **Archived** | Filters by plan status. | |
| **Store** · **Since** · **Sort** | The store a plan reads; **Last 7 / 30 / 90 days**; **Last saved**, **Newest** or **Name**. | |
| **Search plan, SPU, product name…** | At least 2 characters. | |
| **New plan** | Opens [New plan](#new-plan). | |
| **Archive** / **Unarchive** | Archives the selected plans, or brings archived ones back. | Changes SellerSheet |
| **Columns** | Shows or hides columns: **Image**, **Product / SPU**, **Store**, **Step**, **Status**, **Images**, **Saved**, **By**. | |
| **Open** | Opens the plan. | |
### New plan [#new-plan]
| Control | What it does | Effect |
| ------------------------------ | ---------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Product** | A product from your catalog — search SKU, ASIN or name. A product has one plan. | |
| **Read the live listing from** | The store Studio reads the live listing and competitors from. You choose where to publish in step 5. | |
| **Create plan** | Creates the plan — or opens the product's plan if it has one. | Changes SellerSheet |
### Plan header and footer [#plan-header]
| Control | What it does | Effect |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- |
| **Saved** *time* · *name* **on** *step* | When the plan was saved, and who else is on it now. | |
| **Activity** | Who saved each step, and who is on the plan now. | |
| **Credits** *balance* | Opens Billing & Credits. Hover it for what this plan spent. | |
| Steps **Product** … **Publish** | Opens that step. | |
| **Profile** — **Amazon** *store* / **noon** *account* | Copy, Images and Publish work on the profile chosen here; each keeps its own copy and images. Product and Buyer insights are shared. **read-only** marks a profile you cannot write. | |
| **Back** · **Continue** | The previous or next step. Steps save themselves; these buttons save nothing extra. | |
| **Save to Sheet** | Not available yet — saving a plan to a Google Sheet comes in a later release. | — |
| **Changed by someone else · Resolve** | When a teammate saved the same step while you edited: **Show their version**, then **Keep mine** or **Load theirs**. | Changes SellerSheet |
### 1 · Product [#product]
| Control | What it does | Effect |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Refresh** | Reads the live listing and the top competitors from Amazon into the plan. Amazon stores only. | |
| **SKUs & images** tab | Each SKU with its status, price and images. Click an image to use it as a sample — samples go with every copy and image generation. | Changes SellerSheet |
| **Make hero** | Makes this SKU the product's hero. | Changes SellerSheet |
| **Upload files** · **Paste image URL + Enter** | Adds your own photos to the plan's uploads. | Changes SellerSheet |
| **Live text** tab | The live title, item highlight, bullet points and description of one **SKU**; edit them as your draft. **Reset to live** puts the live text back. When the plan has also read a noon listing, switch between **Amazon** and **noon**. | Changes SellerSheet |
| **Competitors** tab → **Find top 3** | Searches Amazon with the product's name and adds the top 3 listings. | |
| **ASIN or image URL** → **Add** | Adds a competitor by its ASIN or product page, or an image URL to your uploads. | Changes SellerSheet |
| **Upload reference** | Uploads a reference image. | Changes SellerSheet |
| **Copy** · **Copy to draft** | Copies one field, or every field, of a competitor into your draft. | Changes SellerSheet |
| **Remove** · hide image | Removes a competitor, or hides one of its images from the pickers. | Changes SellerSheet |
### 2 · Buyer insights [#buyer-insights]
Optional — Copy works from your Draft too. Amazon shares buyer data for US, UK, FR, IT, DE, ES and JP only; for another marketplace you pick one of these to view the report through.
| Control | What it does | Effect |
| -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| **Marketplace the report is viewed through** · **Category the report is about** | Where and what the report covers. The category is the listing's own, or one you look up by browse node id or product kind. | |
| **Create report** / **Create again** | Builds the buyer insights report: what buyers praise and complain about, and what top sellers solved. | |
| **Answer the N questions** | Opens **Answers** on the gaps buyers ask about. | |
| **Answers** tab — answer boxes, **Confirm**, **Use examples as starting points** | Your answers become facts in the brief; blanks are left out and nothing is invented. Press Tab in an empty box to start from the sample. | Changes SellerSheet |
| Buyer keywords · **Add all** | Words buyers use. Click one, or **Add all**, to add them to the copy's must-integrate keywords. | Changes SellerSheet |
| **Write brief** | Writes the Listing Brief from your answers. | |
| **Brief** tab → **Copy uses** **Draft** / **AI Revised** | Which instructions Copy generates from: your Draft, or the Draft plus this brief. | Changes SellerSheet |
| **Revise** | Writes the brief again. | |
| **Generate copy from this brief** | Sets Copy to use AI Revised and opens step 3. Nothing runs until you generate there. | Changes SellerSheet |
### 3 · Copy [#copy]
| Control | What it does | Effect |
| --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| **Instructions** — **Draft** · **AI Revised**, **Copy uses** | The facts, tone and claims the copy must follow. AI Revised is the brief from step 2; editing it by hand marks the brief out of date. | Changes SellerSheet |
| **Samples** | Product photos the model looks at. | Changes SellerSheet |
| **Learn from** | Competitors whose title and first five bullets the model studies. None picked sends none. | Changes SellerSheet |
| **Must-integrate keywords** | Words the copy must include. Enter or a comma adds one; paste a list to add many. | Changes SellerSheet |
| **Variants** | Every child SKU goes to the model, which writes a title, highlight and one bullet per SKU on top of the shared copy. Read-only. | |
| **Output languages** | English is the source and always generated. Each language is priced separately. | Changes SellerSheet |
| **Length** — **Shorter** · **Longer** · **Reset** | The longest each field may be, for this plan. | Changes SellerSheet |
| **Save as default** | Keeps these lengths as your own default, for your next plans and the Sheets sidebar. | Changes SellerSheet |
| **Generate copy** / **Regenerate copy** | Writes the title, item highlight, bullet points, description and search terms in every chosen language. | |
| Language tabs → **Regenerate** *language* | Writes one language again. | |
| **SKU** · **Show original** | Shows the copy of the parent, the hero or one SKU; compare with the live text. | |
| Fields **Title** · **Item highlight** · **Bullet point** · **Description** · **Search terms** | Edit in place. Counters turn amber at the limit and red over it. **verify** marks numbers that are not in your facts — check them. | Changes SellerSheet |
On a **noon** profile, Copy writes English and Arabic together:
| Control | What it does | Effect |
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| **Generate EN + AR** | Writes noon's title, bullets and description in both languages; priced as two languages. | |
| **Start from Amazon** | Free. Copies the Amazon English text (generated, else live) and places the Amazon images on noon — MAIN to S01, Image 1–7 to S02–S08. Image 8 has no noon slot. | Changes SellerSheet |
### 4 · Images [#images]
The **Plan** card sets what to make; the slot table below has one row per listing position, per SKU. The **A+** tab beside the SKU tabs holds the A+ modules.
| Control | What it does | Effect |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------- |
| **Reads** | What Re-plan reads: the brief, the copy and the sample photos. | |
| **Images** · **Number of images** · **Size** · **Callouts** | Images on or off; MAIN + N images; **1024 · fast** or **2048 · full**; short feature text on the secondary images, never on MAIN. | Changes SellerSheet |
| **A+** · **Tier** · **Modules** · **Text** | A+ on or off; **Basic · 970 × 600** or **Premium · 1464 × 600**; how many modules; text on or off. | Changes SellerSheet |
| **Plan by hand** | Fill the rows' guides yourself. | Changes SellerSheet |
| **Re-plan** | Writes each row's guide and the A+ modules from the brief, copy and samples. Samples, references and versions stay. | |
| **Fold the plan** | Folds the card to one line, in this browser. | |
| SKU picker | The SKU whose slots you see; **2/6** = slots holding a selected version. | |
| **Add slot ▾** | Adds a free listing position. | Changes SellerSheet |
| **Generate ready** | Generates every slot that is ready. | |
| **Guide** | What the slot's image should show (Purpose, Callouts). **Held** waits for an unanswered fact. | Changes SellerSheet |
| **Add sample photos** | Photos of your product the image is made from, up to 6. | Changes SellerSheet |
| **Add a reference** · **Change the reference** · **Clear the reference** | A style to follow — from **My gallery**, **Reference gallery**, **My images** or **Competitors**, a pasted URL or an upload — used as **Style**, **Blend** or **Exact**. | Changes SellerSheet |
| **Generate** / **Again** | Makes new versions of this slot. Its menu sets **Size**, versions per run, and **Remove slot**. | |
| Live image → **Edit an area of the live** *slot* | Edits an area of the image now on the listing, as a new version. | |
A version's menu:
| Control | What it does | Effect |
| ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| **Select** · *language* | Puts this version on the plan's store at this position. It reaches Amazon only when you send it in Publish. Needs write access to the store. | Changes SellerSheet |
| **Place on** | Puts it on the same position of the plan's other stores. | Changes SellerSheet |
| **Use as a sample** · **Use as the reference** | Feeds this version into the next generation. | Changes SellerSheet |
| **Also use this image for** · **Use for** *SKU* | A copy for another SKU, placed on its slot. | Changes SellerSheet |
| **Edit an area…** | Changes one area of this version, as a new version. | |
| **Compare** | Compares this version with others. | |
| **Add to my gallery** | Saves it to your gallery; the image is read once to describe its style. | |
| **Contains an AI person** | Adds or removes Amazon's AI-person disclosure tag in the image file. | Changes SellerSheet |
| **Languages · click to convert** | Makes this image for another language, as a new version. Priced per language. | |
| **Colours · convert for another SKU** | Makes the image in another SKU's colour. Priced per conversion. | |
The **A+** tab:
| Control | What it does | Effect |
| --------------------------------------------------------------- | ------------------------------------------------ | -------------------------------- |
| **Generate all** | Makes every module's image. | |
| Module brief line · **Headline** · **Body** | Edit the module's brief and text by hand. | Changes SellerSheet |
| **Write with AI** | Writes the module's headline, body and alt text. | |
| **Convert to Premium** · **Convert to Basic** · **Make mobile** | Remakes a module image at another canvas size. | |
| **Pick** | Chooses the version used for the module. | Changes SellerSheet |
Studio never sends A+ to Amazon: Publish lists the A+ cells for you to copy into your Sheet.
### 5 · Publish [#publish]
| Control | What it does | Effect |
| ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------ |
| **Preview** · **Publish** | Preview the listing page, or send. | |
| **Stores** · **Language** · **Live or new** · **SKU** | In Preview: which store, language, SKU, and **Current live** or **New**. | |
| Store tabs | Publish has one tab per Amazon store of the plan. A ringed image is a new version (sent); a faded image is the live one (kept, not sent). | |
| **Include text, all SKUs** · **Text** | Whether each SKU's text is sent with its images. | Changes SellerSheet |
| **Copy images from** | Copies the new image versions of another SKU onto this one. | Changes SellerSheet |
| **Edit listing** | Per field: **Text source** **Generated** or **Original**, and which fields to submit — **Submit all** or **Submit none**. A field over Amazon's limit, or with an unanswered ⟨fill in⟩, is never sent; the row says **Fix N field(s)**. | Changes SellerSheet |
| **Dry run** · **Dry run all** | Amazon checks the change and answers **Valid** or the issues. Nothing is saved on Amazon. | |
| **Send** · **Send N SKUs** | After a confirm, **Send to Amazon** changes the live listings of the named SKUs: their new images and ticked text fields. Amazon may take minutes to show it. | |
| **Use in catalog** | Adds the SKU's new images to its images in [Products](/help/app/products). | Changes SellerSheet |
| A+ → **Copy as TSV** | Copies the A+ cells to paste into your Sheet. | |
On a **noon** profile, Publish sends one noon listing — the English and Arabic copy, the images by position, and the SKUs linked on that account:
| Control | What it does | Effect |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Dry run** | noon checks the listing without saving. | |
| **Send N to noon** | Sends it. Waits until the Arabic copy exists. noon then reviews it; images are fetched 8–17 minutes after a save. | Live on noon |
| **Check status** | Reads QC and noon's review from noon again. | |
| **Open the listing form** | Opens the listing in the [noon listing form](/help/app/catalog#new-noon-listing). | |
Removing an image in Studio never removes it on noon.
### Image Library [#image-library]
**Image Library** in the menu: images made in Studio and saved for your catalog SKUs.
| Control | What it does | Effect |
| ---------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- |
| **Catalog** · **My gallery** · **Reference gallery** | Your SKUs' versions; your own saved images; public reference images. | |
| **List** · **Grid** | How the images are shown. | |
| **Product** · **SKU** · **Slot** · **Used on** · **Source** | Filters for Catalog. **Used on** is the store a version is placed on, or **not used**. | |
| **Platform** · **Surface** · **Image type** · **Category** · **Style** | Filters for the galleries. **Surface**: **Listing images**, **A+ basic**, **A+ premium**. | |
| **Search SKU, SPU, product…** | At least 2 characters. | |
| **Use on SKU…** | Catalog, one image selected: copies it to a SKU and slot you pick on the same store, as a new version, and places it there. The original stays. | Changes SellerSheet |
| **Add to my gallery** | Catalog: saves the selected versions to your gallery. Each is read once to describe its style, billed per image. | |
| **Copy URLs** · **Download** | Catalog: copies the selected images' links, or downloads them. | |
| **Upload** | My gallery: adds your own images. Each is read once to describe its style. | |
| An image → details | **Used on**, its **Versions**, when it was **Made**; **Copy URL**, **Add to my gallery**, **Open in Studio**, **Use on SKU…**. | |
| **AI person** | Marks an image showing a photorealistic AI-made person (Amazon's disclosure); the file's metadata is updated. | Changes SellerSheet |
## Related [#related]
* [AI images](/docs/mcp-api/workflows/images) — the same image tools for your AI over MCP.
* [Optimize listings](/docs/mcp-api/workflows/listings-optimize) — listing copy with your AI.
* [Review insights](/docs/mcp-api/workflows/reviews) — the buyer insights report.
* [A+ Content](/docs/mcp-api/workflows/aplus) — publishing A+, which Studio leaves to you.
* [Images panel](/help/sheets/sellers/images) — AI listing images in the Google Sheets sidebar.
* [Billing & Credits](/help/app/settings/billing) — how Credits are charged and refunded.
## Stuck? [#stuck]
* An error message in the app: [Web app troubleshooting](/help/troubleshooting/app).
* Still stuck: [Contact support](/help/contact).
# Contact support (https://sellersheetai.com/help/contact)
> Write to support, or ask in the MCP group on WeChat or WhatsApp — and what to include so we can answer the first time.
**E-mail:** [support@sellersheetai.com](mailto:support@sellersheetai.com)
**Ask in the group:** scan a code with the app on your phone.
## What to include [#what-to-include]
* **The message you saw**, word for word, and where: the sidebar panel, the app screen or your AI client.
* **When it happened**, with your time zone.
* **The store ref**, for example .
# Help (https://sellersheetai.com/help)
> Help for SellerSheet's own screens — the Google Sheets sidebar and the web app — and for anything that went wrong.
## Where are you stuck? [#where-are-you-stuck]
## Common questions [#common-questions]
* [The sidebar asks for a store. What do I type?](/help/troubleshooting/sheets#err-store-ref)
* [The sidebar says to run an earlier step first](/help/troubleshooting/sheets#err-step-order)
* [Get Amazon's notifications in Feishu, Slack or your own system](/help/app/settings/webhooks)
* [Connect a store or add a marketplace](/docs/start/connect)
* [Let a teammate see a store without changing it](/docs/mcp-api/control)
* [How Credits are charged, and refunded](/help/app/settings/billing)
* [Does this button change anything on Amazon?](/help/sheets/buttons)
* [My AI says the key is unauthorized](/help/troubleshooting/ai#signing-in)
Still stuck? [Contact support](/help/contact) — by e-mail, or in the MCP group on WeChat or WhatsApp.
# Ads Reports (https://sellersheetai.com/help/sheets/ads/reports)
> Request Amazon Ads reports from sheet rows and download the finished reports.
The **Ads Reports** panel requests Amazon Ads reports on demand. The Ads reports SellerSheet syncs on a schedule are already in the [data warehouse](/docs/data).
\[\[TODO: screenshot ads/reports]]
## Main steps [#main-steps]
### Fill the rows [#fill-the-rows]
On the Ads report sheet, one request per row — pick the report type from the Ads Report Type catalog tab.
### Create Reports [#create-reports]
**Create Reports** submits the requests to Amazon Ads.
### Get Reports [#get-reports]
**Get Reports** polls pending rows and downloads the completed reports.
**Refresh Report Types** regenerates the Ads Report Type catalog tab from the latest report definitions.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Create Reports | 创建报告 | Submit ads report requests from the sheet rows. | WRITES SHEET |
| Get Reports | 获取报告 | Poll pending report rows and download completed reports. | WRITES SHEET |
| Refresh Report Types | 刷新报告类型 | Regenerate the Ads Report Type catalog tab from the latest report definitions. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`ads_create_async_report`](/docs/mcp-api/tools/ads_create_async_report) requests the same reports over MCP. Guide: [Download Amazon PPC reports](/guides/download-amazon-ppc-reports-in-google-sheets).
# Sponsored Brands (https://sellersheetai.com/help/sheets/ads/sb)
> List, create, edit and archive Sponsored Brands campaigns, ad groups, ads, ad associations, targets and negatives from sheets.
The **Sponsored Brands** panel manages SB advertising with one sheet per entity: campaigns, ad groups, ads, ad associations, targets and negatives.
\[\[TODO: screenshot ads/sb]]
## How every ads sheet works [#how-every-ads-sheet-works]
* **Setup … Sheet** creates or resets the header block; data rows are not touched.
* **List …** fetches entities with the row-4 filters (by default ENABLED and PAUSED). On SB Targets, the Negative filter splits negatives from bidding targets.
* **Create …** sends the rows with the required ✎ fields and an EMPTY ID column; new IDs are written back.
* **Edit …** pushes the changes of the ticked rows only. **Delete …** archives the ticked rows on Amazon — it cannot be undone.
* **Load …** drills down from the clicked row (campaign → ad groups or targets, ad group → ads or targets, ad → ad associations).
## Negatives [#negatives]
SB negatives are ad-group level only (Level AD_GROUP with an ad group). **Resolve Brand IDs** looks a plain brand name up on Amazon and rewrites it as `Name (id)` before you create brand negatives.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| List SB campaigns | 列出 | Fetch SB campaigns using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Load Ad Groups | 加载广告组 | Drill down: click a campaign row first — this filters the SB Ad Groups sheet to that campaign and lists them. | WRITES SHEET |
| Load Targets | 加载投放 | Drill down: click a campaign row first — this filters the SB Targets sheet to that campaign and lists them. | WRITES SHEET |
| Create SB campaigns | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SB campaigns | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SB campaigns | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SB campaigns Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SB ad groups | 列出 | Fetch SB ad groups using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Load Ads | 加载广告 | Drill down: click a ad group row first — this filters the SB Ads sheet to that ad group and lists them. | WRITES SHEET |
| Load Targets | 加载投放 | Drill down: click a ad group row first — this filters the SB Targets sheet to that ad group and lists them. | WRITES SHEET |
| Create SB ad groups | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SB ad groups | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SB ad groups | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SB ad groups Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SB ads | 列出 | Fetch SB ads using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Load Ad Associations | 加载广告关联 | Drill down: click a ad row first — this filters the SB Ad Associations sheet to that ad and lists them. | WRITES SHEET |
| Create SB ads | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SB ads | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SB ads | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SB ads Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SB targets | 列出 | Fetch SB targets using the row-4 filters. Default shows active only (ENABLED+PAUSED). Use the Negative filter (TRUE/FALSE/ALL) to split negatives from bidding targets. | WRITES SHEET |
| Create SB targets | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SB targets | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SB targets | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SB targets Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SB negatives | 列出 | Pull ALL SB negatives (keyword · product · brand, ad-group level) for the store, filtered by row-4 Campaign / State. Names from Ads Names. | WRITES SHEET |
| Create SB negatives | 创建 | Create from rows with NO Target ID. Per-type gate first; SB is ad-group level only (Level=AD_GROUP + an Ad Group required). | LIVE ON AMAZON, WRITES SHEET |
| Resolve Brand IDs | 解析品牌 ID | For ticked BRAND rows with a plain name, look up the brand via Amazon and rewrite as 'Name (id)'. | WRITES SHEET |
| Edit SB negatives | 编辑所选 | Push State (ENABLED/PAUSED) changes for ticked rows. | LIVE ON AMAZON, WRITES SHEET |
| Delete SB negatives | 删除所选 | PERMANENTLY archive ticked negatives — v1 delete = archive. | LIVE ON AMAZON, WRITES SHEET |
| Setup SB Negatives Sheet | 设置表格 | Create or reset the SB Negatives tab. | WRITES SHEET |
| List SB ad associations | 列出 | Fetch SB ad associations using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Create SB ad associations | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SB ad associations | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SB ad associations | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SB Associations Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
The same entities are available over MCP — see the Ads section of the [tool reference](/docs/mcp-api/tools).
# Sponsored Display (https://sellersheetai.com/help/sheets/ads/sd)
> List, create, edit and archive Sponsored Display campaigns, ad groups, ads, targets and negatives from sheets.
The **Sponsored Display** panel manages SD advertising with one sheet per entity: campaigns, ad groups, ads, targets and negatives.
\[\[TODO: screenshot ads/sd]]
## How every ads sheet works [#how-every-ads-sheet-works]
* **Setup … Sheet** creates or resets the header block; data rows are not touched.
* **List …** fetches entities with the row-4 filters (by default ENABLED and PAUSED). On SD Targets, the Negative filter splits negatives from bidding targets.
* **Create …** sends the rows with the required ✎ fields and an EMPTY ID column; new IDs are written back.
* **Edit …** pushes the changes of the ticked rows only. **Delete …** archives the ticked rows on Amazon — it cannot be undone.
* **Load …** drills down from the clicked campaign or ad group.
## Negatives [#negatives]
SD negatives are product or brand only, at ad-group level (no keyword negatives). **Resolve Brand IDs** turns a plain brand name into `Name (id)`.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| List SD campaigns | 列出 | Fetch SD campaigns using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Load Ad Groups | 加载广告组 | Drill down: click a campaign row first — this filters the SD Ad Groups sheet to that campaign and lists them. | WRITES SHEET |
| Load Targets | 加载投放 | Drill down: click a campaign row first — this filters the SD Targets sheet to that campaign and lists them. | WRITES SHEET |
| Create SD campaigns | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SD campaigns | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SD campaigns | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SD campaigns Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SD ad groups | 列出 | Fetch SD ad groups using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Load Ads | 加载广告 | Drill down: click a ad group row first — this filters the SD Ads sheet to that ad group and lists them. | WRITES SHEET |
| Load Targets | 加载投放 | Drill down: click a ad group row first — this filters the SD Targets sheet to that ad group and lists them. | WRITES SHEET |
| Create SD ad groups | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SD ad groups | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SD ad groups | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SD ad groups Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SD ads | 列出 | Fetch SD ads using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Create SD ads | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SD ads | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SD ads | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SD ads Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SD targets | 列出 | Fetch SD targets using the row-4 filters. Default shows active only (ENABLED+PAUSED). Use the Negative filter (TRUE/FALSE/ALL) to split negatives from bidding targets. | WRITES SHEET |
| Create SD targets | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SD targets | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SD targets | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SD targets Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SD negatives | 列出 | Pull ALL SD negatives (product · brand, ad-group level) for the store, filtered by row-4 Campaign / State. | WRITES SHEET |
| Create SD negatives | 创建 | Create from rows with NO Target ID. SD is PRODUCT/BRAND only, ad-group level only (keyword is not offered). | LIVE ON AMAZON, WRITES SHEET |
| Resolve Brand IDs | 解析品牌 ID | For ticked BRAND rows with a plain name, look up the brand via Amazon and rewrite as 'Name (id)'. | WRITES SHEET |
| Edit SD negatives | 编辑所选 | Push State (ENABLED/PAUSED) changes for ticked rows. | LIVE ON AMAZON, WRITES SHEET |
| Delete SD negatives | 删除所选 | PERMANENTLY archive ticked negatives — v1 delete = archive. | LIVE ON AMAZON, WRITES SHEET |
| Setup SD Negatives Sheet | 设置表格 | Create or reset the SD Negatives tab. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
The same entities are available over MCP — see the Ads section of the [tool reference](/docs/mcp-api/tools).
# Sponsored Products (https://sellersheetai.com/help/sheets/ads/sp)
> Build, list, create, edit and archive Sponsored Products campaigns, ad groups, ads, targets and negatives from sheets — plus suggestions, a bid optimizer, portfolios, exports, history and recommendations.
The **Sponsored Products** panel manages SP advertising from Google Sheets. Every entity has its own sheet and the same five buttons; the Campaign Builder creates a whole campaign structure in one go.
\[\[TODO: screenshot ads/sp]]
## How every ads sheet works [#how-every-ads-sheet-works]
* **Setup … Sheet** creates or resets the header block — filters in row 4, results below. Data rows are not touched.
* **List …** fetches entities with the row-4 filters. By default only active ones load (ENABLED and PAUSED).
* **Create …** sends the rows that have the required ✎ fields and an EMPTY ID column; the new Amazon IDs are written back.
* **Edit …** pushes your changes — only for rows whose Select box is ticked, so nothing is mass-edited by accident.
* **Delete …** archives the ticked rows on Amazon. Archiving cannot be undone.
* **Load Ad Groups / Load Ads / Load Targets** drill down from the clicked row to the next sheet.
## Main steps — launch a campaign with the Builder [#main-steps--launch-a-campaign-with-the-builder]
### Set up the Builder [#set-up-the-builder]
**Setup Tabs** creates the five Campaign Builder tabs: Campaigns, Targets, Bidding Adjustment, Negatives, Bulk Sheet.
### Plan and get suggestions [#plan-and-get-suggestions]
Fill the campaigns and ad groups; **Get Suggestions** writes Amazon's ranked keyword recommendations with suggested bids to Builder · Suggestions; **Add Selected to Targets** appends the ticked ones.
### Validate [#validate]
**Validate All** checks joins, enums, budgets, naming and name collisions; problems land in the Status columns.
### Launch [#launch]
**Launch** validates, then creates the whole structure on Amazon — campaigns, ad groups, ads, targets, negatives — and writes the IDs back. Rows that already have IDs are skipped.
## Optimize [#optimize]
* **SP Suggestions:** get targeting and keyword suggestions, mine your own search-term report for negatives (terms with clicks and zero orders), then stage the ticked rows into SP Targets as PAUSED rows to review and create.
* **Bid Optimizer:** **Analyze Campaign** reads targets, bid recommendations, the suggested budget and Amazon's recommendations without changing anything; **Apply Selected Bids** and **Apply Suggested Budget** then change the campaign on Amazon.
* **Portfolios, Ads Export, Ads History, Ads Recommendations:** list and edit portfolios, export entities, read the change history, and list or apply Amazon's recommendations.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Setup Tabs | 1 · 初始化标签页 | Create the 5 Campaign Builder tabs (Campaigns / Targets / Bidding Adjustment / Negatives / Bulk Sheet). | WRITES SHEET |
| Get Suggestions | 获取建议 | Amazon ranked keyword recommendations with suggested bids for every manual ad group's products — written to Builder · Suggestions for review. | WRITES SHEET |
| Add Selected to Targets | 3 · 将所选加入投放 | Append the ticked suggestion rows to Builder · Targets with their suggested bids. | WRITES SHEET |
| Validate All | 4 · 全部校验 | Validate the whole Builder workbook — joins, enums, budgets, naming, and live name-collision check. Problems land in the Status columns and the Bulk Sheet tab. | WRITES SHEET |
| Launch | 5 · 启动 | Validate, then create the whole structure on Amazon (campaigns → ad groups → ads → targets → negatives); IDs and per-row statuses are written back. Rows that already have IDs are skipped. | LIVE ON AMAZON, WRITES SHEET |
| List SP campaigns | 列出 | Fetch SP campaigns using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Load Ad Groups | 加载广告组 | Drill down: click a campaign row first — this filters the SP Ad Groups sheet to that campaign and lists them. | WRITES SHEET |
| Load Targets | 加载投放 | Drill down: click a campaign row first — this filters the SP Targets sheet to that campaign and lists them. | WRITES SHEET |
| Create SP campaigns | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SP campaigns | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SP campaigns | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SP campaigns Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SP ad groups | 列出 | Fetch SP ad groups using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Load Ads | 加载广告 | Drill down: click a ad group row first — this filters the SP Ads sheet to that ad group and lists them. | WRITES SHEET |
| Load Targets | 加载投放 | Drill down: click a ad group row first — this filters the SP Targets sheet to that ad group and lists them. | WRITES SHEET |
| Create SP ad groups | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SP ad groups | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SP ad groups | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SP ad groups Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SP ads | 列出 | Fetch SP ads using the row-4 filters. Default shows active only (ENABLED+PAUSED). | WRITES SHEET |
| Create SP ads | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SP ads | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SP ads | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SP ads Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SP targets | 列出 | Fetch SP BIDDING targets using the row-4 filters (positives only — negatives are on SP Negatives). Default shows active (ENABLED+PAUSED). | WRITES SHEET |
| Create SP targets | 创建 | Create from rows with the required ✎ fields filled and an EMPTY ID column; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit SP targets | 编辑所选 | Push your changes to Amazon — ONLY for rows whose Select box is ticked. | LIVE ON AMAZON, WRITES SHEET |
| Delete SP targets | 删除所选 | PERMANENTLY archive the ticked rows on Amazon — v1 delete = archive, it cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SP targets Sheet | 设置表格 | Create or reset the sheet header block (data rows untouched). | WRITES SHEET |
| List SP negatives | 列出 | Pull ALL negatives (keyword · product · brand, both levels) for the store, filtered by the row-4 Campaign / State. Names resolved from Ads Names. | WRITES SHEET |
| Create SP negatives | 创建 | Create from rows with NO Target ID. Per-type gate runs first (⚠️ reasons). KEYWORD→keyword+match; PRODUCT→ASIN; BRAND→brand id; Level CAMPAIGN omits the ad group. | LIVE ON AMAZON, WRITES SHEET |
| Resolve Brand IDs | 解析品牌 ID | For ticked BRAND rows whose Brand cell is a plain name, look the brand up via Amazon's brand search and rewrite it as 'Name (id)'. | WRITES SHEET |
| Edit SP negatives | 编辑所选 | Push State (ENABLED/PAUSED) changes to Amazon for ticked rows (negatives have no bid). | LIVE ON AMAZON, WRITES SHEET |
| Delete SP negatives | 删除所选 | PERMANENTLY archive the ticked negatives — v1 delete = archive, cannot be undone. | LIVE ON AMAZON, WRITES SHEET |
| Setup SP Negatives Sheet | 设置表格 | Create or reset the SP Negatives tab (data rows untouched). | WRITES SHEET |
| Get Suggestions | 获取建议 | Fetch suggestions per the row-4 controls (Source, ASINs / Campaign+Ad Group names, Suggestion Type). Keyword bids are already decimal currency. NOTE: negative-KEYWORD suggestions have no Amazon endpoint — mine the SP Search Terms report instead. | WRITES SHEET |
| Search-Term Negatives | 搜索词否定 | NOT an Amazon suggestion — Amazon has no negative-keyword recommendation endpoint. Mines YOUR SP Search Terms report (rpt_sp_search_terms) for search terms with ≥ Min Clicks (J4) and ZERO orders over the Window (K4), writing MINED rows into the grid. Campaign (C4) scopes it; blank = whole account. Tick rows and Send Selected as Negatives. | WRITES SHEET |
| Send Selected to SP Targets | 将所选发送 → SP 投放 | Stage the ticked suggestions into SP Targets (PAUSED, empty ID, Select ticked) — review there, then Create. Duplicates already on SP Targets are SKIPPED. | WRITES SHEET |
| Send Selected as Negatives | 将所选发送为否定投放 | Stage the ticked rows into SP Targets with Negative=TRUE (keyword negatives; brand rows stage as PRODUCT_CATEGORY brand refinements). | WRITES SHEET |
| Setup SP Suggestions Sheet | 初始化表格 | Create or reset the SP Suggestions tab (data rows untouched). | WRITES SHEET |
| Analyze Campaign | 分析广告活动 | Read-only: pull the campaign's targets, bid recs per ad group, suggested budget (with the missed-opportunity WINDOW dates — they can be years old) and Amazon's campaign recommendations. Ad groups without servable ads show 'not delivering' (Amazon 422 — normal). | READ |
| Apply Selected Bids | 应用所选竞价 | MUTATES Amazon: bulk-update the ticked targets' bids per the Apply Mode (MEDIAN / HIGH / CUSTOM New Bid). | LIVE ON AMAZON, WRITES SHEET |
| Apply Suggested Budget | 应用建议预算 | MUTATES Amazon: set the campaign's daily budget to the analyzed Suggested Budget (D4). | LIVE ON AMAZON, WRITES SHEET |
| Setup Bid Optimizer Sheet | 初始化表格 | Create or reset the Bid Optimizer tab. | WRITES SHEET |
| List Portfolios | 列出 | Fetch all portfolios with budgets into the Portfolios sheet. | WRITES SHEET |
| Create Portfolios | 创建 | Create portfolios from rows with a name and NO Portfolio ID; new IDs are written back. | LIVE ON AMAZON, WRITES SHEET |
| Edit Selected | 编辑所选 | Push changes to Amazon — ONLY for Select-ticked rows. Portfolios cannot be archived via the API. | LIVE ON AMAZON, WRITES SHEET |
| Setup Sheet | 设置表格 | Create or reset the Portfolios sheet header block. | WRITES SHEET |
| Setup Sheet | 设置表格 | Create or reset the Ads Export sheet. | WRITES SHEET |
| Submit Export | 提交导出 | Submit ads entity export requests. | WRITES SHEET |
| Get Export Result | 获取导出结果 | Poll pending exports and download completed files. | WRITES SHEET |
| Setup Sheet | 设置表格 | Create or reset the Ads History sheet. | WRITES SHEET |
| Get History | 获取历史 | Fetch ads change history for a date range and entity type. | WRITES SHEET |
| Setup Sheet | 设置表格 | Create or reset the Ads Recommendations sheet. | WRITES SHEET |
| List Recommendations | 列出 | Fetch Amazon’s automated ads recommendations. | WRITES SHEET |
| Apply Recommendations | 应用所选 | Apply the selected recommendations to your account. | LIVE ON AMAZON, WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
The Ads tools work over MCP too — [`ads_query_campaign`](/docs/mcp-api/tools/ads_query_campaign), [`ads_create_campaign`](/docs/mcp-api/tools/ads_create_campaign), [`ads_update_campaign_budget`](/docs/mcp-api/tools/ads_update_campaign_budget) and the rest of the [tool reference](/docs/mcp-api/tools). Guides: [Automate Amazon Ads budgets](/guides/automate-amazon-ads-budgets-in-google-sheets); on the blog, [Let AI manage every dollar of ad budget](/blog/amazon-ads-budget-tools).
# How the sidebar works (https://sellersheetai.com/help/sheets)
> The SellerSheet sidebar for Google Sheets — every Amazon and noon workflow as a button, on template sheets in your own Drive.
The SellerSheet add-on is a sidebar inside Google Sheets. It has buttons, each one a step of a workflow — sync orders, publish listings, create an FBA shipment, launch a campaign — that reads and writes the template sheets SellerSheet creates in your Google Drive. New here? Start with [Install & first sync](/help/sheets/install).
## Five things to know [#how-the-sidebar-works]
1. **Pick a master tab, then a panel.** The tabs at the top switch between **Sellers**, **Vendors**, **Ads** and **noon**; the icon rail down the side lists the panels of that tab. Star any button to pin it to your favorites.
2. **Resources first.** At the top of a panel, Resources links open the panel's spreadsheet and its Drive folder.
3. **Read the group label.** Buttons under *Global · works on any sheet* run from anywhere. Buttons under *Sheet-specific · active tab must match* sit in a group named after a sheet tab — switch to that tab before you click.
4. **Fill the ✎ columns.** On every template sheet a ✎ header is your input (hover it for a note; many offer a dropdown); columns without the mark are filled by SellerSheet after an action, like a status or a link.
5. **Name the store.** Actions that talk to Amazon or noon need a store, written `-` — your store's name plus the marketplace's country code, for example `myStore-US`. It must match one of your stores exactly.
## The panels [#the-panels]
| Master tab | Panel | For |
| ---------- | --------------------------------------------------- | ---------------------------------------------------------- |
| Sellers | [Sales](/help/sheets/sellers/sales) | Orders and invoices |
| Sellers | [Catalogs](/help/sheets/sellers/catalogs) | Research, AI drafts, restriction checks, the Publish Queue |
| Sellers | [FBA](/help/sheets/sellers/fba) | Send to Amazon shipments, labels, inventory health |
| Sellers | [Store Reports](/help/sheets/sellers/store-reports) | On-demand SP-API reports to Drive |
| Sellers | [A+ Content](/help/sheets/sellers/a-plus) | Build, publish and edit A+ documents |
| Sellers | [Images](/help/sheets/sellers/images) | Image library and AI listing images |
| Sellers | [Data Kiosk](/help/sheets/sellers/data-kiosk) | Data Kiosk queries to Drive sheets |
| Sellers | [Dropbox](/help/sheets/sellers/dropbox) | Image URLs from Dropbox |
| Sellers | [Shipments](/help/sheets/sellers/shipments) | B2B shipping orders and packing lists |
| Vendors | [Vendor Orders](/help/sheets/vendors/vendors) | Purchase orders, acknowledgements, status |
| Ads | [Sponsored Products](/help/sheets/ads/sp) | SP campaigns, Builder, suggestions, bid optimizer |
| Ads | [Sponsored Brands](/help/sheets/ads/sb) | SB campaigns and their entities |
| Ads | [Sponsored Display](/help/sheets/ads/sd) | SD campaigns and their entities |
| Ads | [Ads Reports](/help/sheets/ads/reports) | On-demand Amazon Ads reports |
| noon | [noon Listings](/help/sheets/noon/listings) | noon Publish Queue, AI drafts, pricing, stock |
| noon | [noon FBN](/help/sheets/noon/fbn) | noon inbound shipments (ASN) |
| noon | [noon Reports](/help/sheets/noon/reports) | On-demand noon exports to Drive |
Every button of every panel, on one page: [Sidebar buttons](/help/sheets/buttons).
## What a button does to your data [#what-a-button-does-to-your-data]
Each panel page lists its buttons with their effect:
| Effect | Meaning |
| ------------------------------------- | --------------------------------------------------------------------------------------------- |
| **READ** | Changes nothing you typed and nothing on Amazon or noon — a check, a preview, a print dialog. |
| **WRITES SHEET** | Fills, rewrites or clears rows or tabs of your workbook. |
| **WRITES DRIVE** | Saves a file or a spreadsheet to your Google Drive. |
| **LIVE ON AMAZON** / **LIVE ON NOON** | Changes your live data on Amazon or noon — listings, shipments, campaigns, prices, stock. |
| **USES CREDITS** | An AI action, billed from your Credits balance and refunded if it fails. |
## Home [#home]
The bottom bar of the sidebar holds Settings, Dashboard, Notifications and Documentation. The **mini Dashboard** shows your plan, API usage and stores without leaving the sheet.
## Settings [#settings]
Settings holds your account and profile, the **Workspace** (where SellerSheet keeps your folders and spreadsheets), the model route your AI actions use (chosen on Billing & Credits in the app — shown here read-only), **AI Length Preferences** for listing copy, and store management.
Deleted a folder or a template tab? **Re-Initiate Resources** (Settings → Workspace) re-creates what is missing; anything that still exists is left alone. Re-created sheets are empty templates — make a copy first (File → Make a copy) if you want to keep old data.
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
Everything the sidebar does is also available to your own AI client over MCP, and to programs over the API — see [MCP & API](/docs/mcp-api). The agent works in the same sheets, and you review and approve there.
# Install & first sync (https://sellersheetai.com/help/sheets/install)
> Create your SellerSheet account, connect your Amazon store, install the Google Sheets add-on and sync your first orders.
Four steps, about ten minutes: an account, a connected store, the add-on, and a first sync that proves it all works.
## What you need [#what-you-need]
* An Amazon Seller Central account (Professional) — or a Vendor Central or noon account for those tabs.
* A Google account (personal or Workspace). Use the same one for SellerSheet and for Google Sheets.
* Chrome is recommended.
### Create your account [#create-your-account]
Go to [sellersheetai.com/home](https://sellersheetai.com/home) and sign in with Google — or with a code sent to your email. A new account starts on the Free plan.
### Connect your store [#connect-your-store]
In the app, open **Settings → Stores & Marketplaces** and connect your Amazon store: give it a name, pick the region of your Seller Central account, and approve SellerSheet on Amazon. Connect Amazon Ads the same way to use the Ads tab, and a noon account for the noon tab. Connect from the network you normally work from.
Your store's name plus the marketplace's country code is its **store ref**, for example `myStore-US` — that is what you type in a sheet's Store column. Teammates can be invited under **Settings → Members**.
### Install the add-on [#install-the-add-on]
Install **SellerSheet** from the Google Workspace Marketplace (or "Admin install" for a Workspace domain) and grant the permissions it asks for. Open any Google Sheet (`sheet.new`), then **Extensions → SellerSheet** to open the sidebar.
On first open, SellerSheet creates a **SellerSheet** folder in your Drive with its template spreadsheets — Sales, Catalogs, FBA, Store Reports, A+ and more. The panels' Resources links open them.
### Sync your first orders [#sync-your-first-orders]
In the sidebar, open **Sellers → Sales** and click **Sync Orders**. The **Orders** sheet of the SellerSheet Sales spreadsheet fills with your last 30 days of orders, and from then on keeps itself up to date about every 2 hours.
\[\[TODO: screenshot the sidebar after the first sync]]
## Next [#next]
* Learn the sidebar's five ideas on [Sheets add-on](/help/sheets), then pick a panel — [Catalogs](/help/sheets/sellers/catalogs) and [FBA](/help/sheets/sellers/fba) are the busiest.
* Prefer to work with an AI? Connect your own AI client to SellerSheet over MCP: [Get started](/docs/start).
## Troubleshooting [#troubleshooting]
* **"Store not found"** — the Store cell does not match a store of yours. Use the exact `-` ref — your store's name as shown under Settings → Stores & Marketplaces, a hyphen, and the country code.
* **A sheet or folder is missing** — Settings → Workspace → **Re-Initiate Resources** re-creates it.
* **A button says the wrong tab is active** — switch to the sheet tab named in the button's group, then click again.
# noon FBN (https://sellersheetai.com/help/sheets/noon/fbn)
> Create a noon FBN inbound shipment (ASN) from a sheet — items, seal, slot booking, rescheduling and cancellation — and list your shipments.
The **noon FBN** panel sends stock to noon's fulfilment centres. The **noon Inbound** sheet holds one ASN at a time; **noon Shipments** lists them all.
\[\[TODO: screenshot noon/fbn]]
## Main steps [#main-steps]
### Pick the items [#pick-the-items]
**List Eligible Items** loads your FBN-eligible SKUs, with images, into the FBN Product tab; copy the ones to ship into the items table.
### Create the ASN [#create-the-asn]
**Create Shipment** creates the ASN from Store (A9) and Ext Ref (B9); the ASN number lands in C9. **Update Items** pushes the items table (partner SKU, quantity, storage type) to it.
### Seal [#seal]
**Seal Shipment** locks the ASN so it can be scheduled — its items can no longer change.
### Book a slot [#book-a-slot]
**Get Slot Availability** lists destination warehouses and delivery slots; tick ONE slot row and click **Schedule Shipment**.
**Reschedule Shipment** releases a booked slot (the ASN goes back to SEALED) so you can book another; **Cancel Shipment** cancels the whole ASN on noon. **Clear Data (new ASN)** resets the sheet for the next shipment and sends nothing to noon.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| List Eligible Items | 列出可入库商品 | Load FBN-eligible SKUs (with images) into the FBN Product tab, then copy the ones to ship into the items table. | WRITES SHEET |
| Create Shipment | 创建货件 | Create an ASN from Store (A9) + Ext Ref (B9); the ASN number lands in C9. | LIVE ON NOON, WRITES SHEET |
| Update Items | 更新商品 | Push the items table (partner_sku, qty, storage_type) to the ASN. | LIVE ON NOON, WRITES SHEET |
| Load existing items | 加载现有商品 | Pull the current ASN items back into the table to review or edit. | WRITES SHEET |
| Seal Shipment | 封箱发运 | Lock the ASN (SEAL) so it can be scheduled — items can no longer change. | LIVE ON NOON, WRITES SHEET |
| Get Slot Availability | 获取时段可用性 | List destination warehouses + delivery slots for the SEALED ASN into the slots table. | WRITES SHEET |
| Schedule Shipment | 预约送仓 | Tick ONE slot row in the table, then book it for the ASN. | LIVE ON NOON, WRITES SHEET |
| Refresh Status | 刷新状态 | Re-fetch the ASN header + status from noon. | WRITES SHEET |
| Reschedule Shipment | 重新预约送仓 | Release the booked slot of a SCHEDULED ASN (back to SEALED), then Get Slot Availability and Schedule again. | LIVE ON NOON, WRITES SHEET |
| Delete selected item(s) | 删除所选条目 | Remove the ticked item rows from the ASN (before Seal). | LIVE ON NOON, WRITES SHEET |
| Cancel Shipment | 取消货件 | Cancel the whole ASN on noon. | LIVE ON NOON, WRITES SHEET |
| Clear Data (new ASN) | 清空数据(新 ASN) | Wipe this ASN data and reset the sheet to a blank template for the next shipment — keeps the Store. Nothing is sent to noon. | WRITES SHEET |
| List Shipments | 列出货件 | Enter Store in A4, then list all ASNs for the Store into the noon Shipments tab. | WRITES SHEET |
| List Shipment Items | 列出货件商品 | Loads the clicked ASN row's items (with images) into the noon Shipment Items tab. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`noon_inbound_CreateShipment`](/docs/mcp-api/tools/noon_inbound_CreateShipment) and the other noon inbound tools do the same over MCP.
# noon Listings (https://sellersheetai.com/help/sheets/noon/listings)
> Create and update noon listings from the noon Publish Queue, write bilingual copy with AI, and manage content status, pricing, stock and barcodes.
The **noon Listings** panel does for noon what Catalogs does for Amazon: a Publish Queue that creates and updates listings, AI drafts in English and Arabic, and the sheets for content QC, pricing, stock and barcodes. A noon store is named `-`, for example `myNoon-AE`.
\[\[TODO: screenshot noon/listings]]
## Main steps — publish listings [#main-steps--publish-listings]
### Get the template [#get-the-template]
On **noon Publish Queue**, list the Category Codes in F7:F and click **Get Template**: it builds the columns (G onward) with guides for every category. A product whose Parent Group Key is a noon id (Z…) and whose Category Code is blank gets its category from noon.
### Fill the products [#fill-the-products]
The rows sharing a Parent Group Key are one product; its Parent row gives the details and every row gives its Partner SKU and size variant. **Fetch by SKU** fills the Parent row of a product that is already on noon (only when its Product Title is empty).
### Create / Update Listing [#create--update-listing]
**Create / Update Listing** sends every product to noon, one call per product, built from the sheet alone.
### Next batch [#next-batch]
**Clear Row 7+** empties your product rows and keeps the template. Nothing is sent to noon.
## AI drafts and the other sheets [#ai-drafts-and-the-other-sheets]
* **noon Listing Drafts:** **Fetch by SKU**, then **Image → Listing (AI)** or **Optimize Listing (AI)** for bilingual copy (billed from your Credits balance, refunded if it fails), then **Send to Publish Queue**.
* **noon Live Listings:** **Fetch by SKU** loads what is live.
* **noon Content QC:** **Get QC Status** shows attribute, image and live status per parent SKU and language.
* **noon Pricing and noon Stock:** read with **Get Pricing**, **Get Transfer Price**, **Get Offers**, **Get Stock**; change with **Update Pricing**, **Update Transfer Price**, **Update Stock**; **Map Barcodes** and **Create Import** connect partner SKUs to barcodes.
* **noon SKU Delete:** **Delete SKUs** deletes the ticked SKUs on noon — a parent delete removes every variant.
* **noon Reference:** **List Categories**, **List Warehouses**, **Lookup Returns**.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Get Template | 获取模板 | Builds the columns (G+) with guides for every category in Category Code (F7:F); a product whose Parent Group Key is a noon id (Z…) and whose Category Code is blank gets its category from noon. Starts fresh: columns G onward are rebuilt empty; rows 1-3 and columns A-F are kept. | WRITES SHEET |
| Fetch by SKU | 按 SKU 获取 | Fills the Parent row of each product whose Parent Group Key is a noon id (Z…) from noon — one call per product. Only a Parent row whose Product Title is empty runs — clear the title to fetch again; columns G onward are rewritten from noon. A column the template lacks is added at the right; a product noon cannot return keeps its row and gets ⚠ in Brand. Sizes are yours to add: a Child row per size. | WRITES SHEET |
| Create / Update Listing | 创建/更新商品 | LIVE — sends every product to noon, one call per product, built from the sheet alone: the rows sharing a Parent Group Key are one product, its Parent row gives the details and every row gives its Partner SKU and Size Variation. noon keeps any value you leave blank, and each image column is one image slot. noon answers at once: the result is final in the noon Submission Log, and a saved product gets its noon id (Z…) in Parent Group Key and is added to noon Content QC — run Get QC Status there for noon's content check (missing required attributes, QC). noon has no preview, so there is no Validate. | LIVE ON NOON, WRITES SHEET |
| Clear Row 7+ | 清空第 7 行及以下 | Empties your product rows (row 7 down) from column B and keeps the template — ready for the next batch. Nothing is sent to noon. | WRITES SHEET |
| Fetch by SKU | 按 SKU 获取 | Rows with Store+SKU Parent set, Fetched At empty. Clear Fetched At to redo. | WRITES SHEET |
| Fetch by SKU | 按 SKU 获取 | Rows with Store+SKU Parent set, Draft Listing empty. | WRITES SHEET |
| Image → Listing (AI) | 图片 → Listing(AI) | Writes bilingual AI copy from the row's image + Instructions. | USES CREDITS, WRITES SHEET |
| Optimize Listing (AI) | 优化 Listing(AI) | AI rewrites the row's bilingual copy — facts kept. AI | USES CREDITS, WRITES SHEET |
| Send to Publish Queue | 发送至发布队列 | Copies the row into the noon Publish Queue (existing columns only) and marks it SENT. | WRITES SHEET |
| Get QC Status | 获取质检状态 | Fetch content status (attribute/image/live) per sku_parent × language. List sku_parents in column A of the noon Content QC tab first. | WRITES SHEET |
| Delete SKUs | 删除 SKU ⚠ | DESTRUCTIVE: delete ticked child/parent SKUs on noon. Parent deletes cascade to every variant. | LIVE ON NOON, WRITES SHEET |
| Get Pricing | 获取定价 | Read price / msrp / is_active per partner_sku. | WRITES SHEET |
| Update Pricing | 更新定价 | Push price / msrp / is_active to noon. | LIVE ON NOON, WRITES SHEET |
| Get Transfer Price | 获取调拨价 | Read USD cross-border transfer prices per partner_sku. | WRITES SHEET |
| Update Transfer Price | 更新调拨价 | Push USD transfer_price / msrp / is_active to noon. | LIVE ON NOON, WRITES SHEET |
| Get Offers | 获取报价 | Look up noon sku / title / brand / per-country offers for each partner_sku. | WRITES SHEET |
| Get Stock | 获取库存 | Read current available qty for each (warehouse_code, partner_sku) row. | WRITES SHEET |
| Update Stock | 更新库存 | Push the qty column to noon for each row. | LIVE ON NOON, WRITES SHEET |
| Map Barcodes | 映射条码 | Connect each partner_sku to its barcode (UPC/EAN/ISBN) on noon. | LIVE ON NOON, WRITES SHEET |
| Create Import | 创建导入 | Submit the barcode rows as an async import; writes an import reference. | LIVE ON NOON, WRITES SHEET |
| Refresh Status | 刷新状态 | Poll the import status/report for the saved reference. | WRITES SHEET |
| List Warehouses | 列出仓库 | Load the partner warehouses for the Store in A4. | WRITES SHEET |
| List Categories | 列出类目 | List noon catalog categories (codes used by noon Publish Queue). | WRITES SHEET |
| Lookup Returns | 查询退货 | List noon return items + barcode references matching a barcode. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`noon_content_UpsertProduct`](/docs/mcp-api/tools/noon_content_UpsertProduct), [`noon_pricing_BatchUpsertPricing`](/docs/mcp-api/tools/noon_pricing_BatchUpsertPricing) and [`noon_stock_UpdateStock`](/docs/mcp-api/tools/noon_stock_UpdateStock) do the same over MCP. Guide: [Connect noon to SellerSheet](/guides/connect-noon-to-sellersheet).
# noon Reports (https://sellersheetai.com/help/sheets/noon/reports)
> Request noon exports from sheet rows and get the finished files in Google Drive.
The **noon Reports** panel requests noon exports on demand. The noon reports SellerSheet syncs on a schedule are already in the [data warehouse](/docs/data).
\[\[TODO: screenshot noon/reports]]
## Main steps [#main-steps]
1. On the **noon Reports** sheet, from row 4: the Report Type and its parameters.
2. **Create Reports** requests the exports; the Export Code fills in automatically.
3. **Get Reports** polls pending exports; finished ones download to Drive (SellerSheet/NoonReports) and are linked in their row.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Create Reports | 创建报告 | Request noon exports from rows 4+ (Report Type + params); the Export Code fills in automatically. | WRITES SHEET |
| Get Reports | 获取报告 | Poll pending exports; finished ones download to Drive (SellerSheet/NoonReports) and link in the row. | WRITES DRIVE, WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`noon_impex_CreateExport`](/docs/mcp-api/tools/noon_impex_CreateExport) and [`noon_impex_download_export`](/docs/mcp-api/tools/noon_impex_download_export) do the same over MCP.
# A+ Content (https://sellersheetai.com/help/sheets/sellers/a-plus)
> Build A+ documents one module per row, load images from Drive, create and submit them for approval, and manage the ASINs they apply to.
The **A+ Content** panel builds, publishes and maintains A+ documents from the **Create A+** sheet — one module per row, in display order.
\[\[TODO: screenshot sellers/a-plus]]
## Main steps [#main-steps]
### Set up the sheet [#set-up-the-sheet]
Fill the config row (store, locale, A+ name, content type), pick a Module Type per row, then click **Load Hints**: headers, dropdowns and per-module color hints show what each module needs, with an Example column.
### Add images [#add-images]
Paste image URLs, or click **Load Images (Drive)** to fill them from the Drive folder set in E4.
### Create & Submit [#create--submit]
Enter the ASINs (G4) and click **Create & Submit**: it creates a NEW A+ document on Amazon, applies the ASINs and submits it for approval. Amazon-hosted images are reused; Drive and other image URLs are uploaded.
## Edit what is already live [#edit-what-is-already-live]
* **List A+** (List A+ sheet) lists every A+ document of the store in A3, 25 rows per click; **Load A+** there copies the clicked document into Create A+ as an editable copy.
* **Load A+** (Create A+) loads the document whose key is in H4; edit it and click **Update A+** for a full-replace update — the ASINs are re-applied and approval is resubmitted.
* **Revise A+ ASINs** replaces the ASIN set of an existing document and resubmits it.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Load Hints | 加载提示 | Sets up / refreshes the sheet: headers, dropdowns, per-module color hints and the Example column. Run after picking module types. | WRITES SHEET |
| Load Images (Drive) | 加载图片(Drive) | Fill image URLs from the Drive folder set in E4. | WRITES SHEET |
| Create & Submit | 创建并提交 | LIVE: creates a NEW A+ document on Amazon (Content Document JSON if present, else the module rows), applies the ASINs (G4) and submits for approval. Amazon-hosted images are reused directly; Drive/other image URLs are uploaded. | LIVE ON AMAZON, WRITES SHEET |
| Load A+ | 加载 A+ | Loads the existing A+ document whose key is in the Content Reference Key config cell (H4): modules into rows, module JSON into Content Document, ASINs into G4 — edit it, or change name/store to copy it. | WRITES SHEET |
| Update A+ | 更新 A+ | LIVE: full-replace update of the EXISTING document whose key is in Content Reference Key (H4) — load it with Load A+, edit, then update; ASINs re-applied and approval resubmitted. | LIVE ON AMAZON, WRITES SHEET |
| Revise A+ ASINs | 修订 ASIN | Replace the ASIN set on an existing A+ document and resubmit for approval. | LIVE ON AMAZON, WRITES SHEET |
| List A+ | 列出 A+ | List all A+ documents for the store in A3; details fill 25 rows per click. | WRITES SHEET |
| Load A+ | 加载 A+ | Loads the clicked result row's A+ document into the Create A+ sheet as an editable copy (JSON saved in its Content Document cell). | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`aplusContent_create_and_publish`](/docs/mcp-api/tools/aplusContent_create_and_publish) creates and submits a document over MCP. Guide: [Create Amazon A+ content in Google Sheets](/guides/create-amazon-a-plus-content-in-google-sheets).
# Catalogs (https://sellersheetai.com/help/sheets/sellers/catalogs)
> Your catalog, competitor research, AI listing drafts, restriction checks and the Publish Queue that creates, updates and deletes listings in bulk.
The **Catalogs** panel is where listings are researched, written and published. Each group of buttons is named after the sheet tab it works on — switch to that tab before you click.
\[\[TODO: screenshot sellers/catalogs]]
## The sheets [#the-sheets]
| Sheet | What it is for |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| **Catalog** | Every SKU of one store (typed in A4, e.g. `myStore-US`), with thumbnails, from the SellerSheet warehouse. |
| **Listing Snapshot** | Your own listing as submitted (fetch by SKU) next to Amazon's catalog page (fetch by ASIN) — compare the copy. |
| **Catalog Research** | Competitor rows with content, BSR, Buy Box, offers, fee estimate and margin; pick a winner as your starting point. |
| **Listing Drafts** | AI-written or AI-optimized listing copy, translations, then a hand-off to the Publish Queue. |
| **Restriction Check** | Whether you can list an ASIN, plus its buy box price, rank and offer counts. |
| **Publish Queue** | Create, replace, partially update or delete listings — validate first, then publish a few rows instantly or the whole tab as a feed. |
| **Submission Log** | Results and issues of every validation and submission. |
## Main steps — publish listings [#main-steps--publish-listings]
### Get the template [#get-the-template]
On **Publish Queue**, list the product types in D7:D and click **Get Template**: it builds the attribute columns (F onward) with guides from Amazon's schema. Rows 1–3 and columns A–E are kept, so it is safe to re-run.
### Fill the rows [#fill-the-rows]
Type the values, or fill a row from an existing listing: **Fetch by ASIN** (Amazon's catalog), **Fetch by SKU** (your submitted listing) or **Fill from JSON**. These rewrite the whole row and clear a column the source lacks, and only run on rows whose Item Name is empty — clear the title to fetch again.
### Validate [#validate]
**Validate (Preview)** checks up to 20 rows against Amazon without publishing. Issues land in **Submission Log**; fix them and validate again.
### Publish [#publish]
**Create/Replace/Del.** runs up to 20 rows instantly, each by its operation type (UPDATE, PARTIAL_UPDATE, PATCH-DELETE, DELETE — a DELETE removes the SKU from Amazon and has no preview). **Submit Feed** publishes every row as one bulk feed of up to 25,000 rows; **Refresh Status** on Submission Log fills in the feed results.
### Back up [#back-up]
**Backup** snapshots the tab into your Listing Log spreadsheet before a big change.
## Main steps — write a listing with AI [#main-steps--write-a-listing-with-ai]
1. On **Catalog Research**, **Fetch Catalog Data** for competitor ASINs (or **Discover by Keyword**), **Set as Winner**, then **Copy Winner to Drafts**.
2. On **Listing Drafts**, run **Image → Listing (AI)** or **Optimize Listing (AI)**; **Optimize Title (AI)** rewrites only the title and highlight; **Translate Listing (AI)** fills the languages listed on the Translations tab. Lengths follow Settings → AI Length Preferences.
3. **Send to Publish Queue** copies the draft into the first empty Publish Queue row — run Get Template for that product type first.
The AI buttons are billed from your Credits balance and refunded if they fail.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Sync Catalog | 同步商品目录 | Pulls every SKU of the ONE store typed in A4 (e.g. myStore-US) from the SellerSheet warehouse into the Catalog tab, with thumbnails. Filter afterwards with the row-5 column filter. | WRITES SHEET |
| Fetch by SKU | 按 SKU 获取 | Fetches your own listing (what you submitted) for rows with Store + SKU and an empty JSON cell; fills the ASIN too. Clear a row's JSON cell to re-fetch it. A row that fails shows the reason in its Image cell. | WRITES SHEET |
| Fetch by ASIN | 按 ASIN 获取 | Fetches Amazon's catalog page (what shoppers see) for rows with Store + ASIN, NO SKU and an empty JSON cell — yours or a competitor's. Put the same product on a SKU row and an ASIN row to compare the copy. | WRITES SHEET |
| Fetch Catalog Data | 获取目录数据 | Fills every competitor row with Store + ASIN (rows 5+) from the Amazon catalog: content, BSR, Buy Box, FBA/MFC offers, fee estimate, margin, and your own SKU if already listed. The winner row (4) is never overwritten. | WRITES SHEET |
| Discover by Keyword | 按关键词发现 | Searches Amazon by keyword and appends up to 10 new competitor ASINs as fully filled rows. | WRITES SHEET |
| Set as Winner | 设为最佳 | Copies the clicked competitor row into the winner row (row 4) as your listing starting point. | WRITES SHEET |
| Copy Winner to Drafts | 将最佳复制到草稿 | Sends the winner row (row 4) — identity, image and combined listing copy — to Listing Drafts for AI optimization. | WRITES SHEET |
| Send to Restriction Check | 发送至限制检查 | Adds the selected rows' Store + ASIN to the Restriction Check sheet to verify you can list them. | WRITES SHEET |
| Fetch by ASIN | 按 ASIN 获取 | Fills draft rows from the reference ASIN's catalog data (rows with Store + ASIN and an empty Image). | WRITES SHEET |
| Fetch by SKU | 按 SKU 获取 | Fills draft rows from YOUR OWN live listing by SKU — refurbish an existing listing (rows with Store + SKU and an empty Image). | WRITES SHEET |
| Image → Listing (AI) | 图片 → Listing(AI) | Sends the row's Image photo(s) + Instructions + Draft Keywords (each queued keyword MUST appear in the copy) to AI, which writes a complete listing into the AI columns: Item Name, Item Highlight, 5 Bullet Points, Description, backend Generic Keywords (fills Amazon's 250-byte budget) and PPC keyword ideas, plus A+ / image ideas. Lengths follow Settings → AI Length Preferences. | USES CREDITS, WRITES SHEET |
| Optimize Listing (AI) | 优化 Listing(AI) | Sends the row's Image + Instructions + Draft Listing + Draft Keywords to AI, which rewrites everything into the AI columns: Item Name, Item Highlight, Bullets, Description, backend Generic Keywords (fills Amazon's 250-byte budget) and PPC ideas, plus A+ / image ideas — facts are kept, only the copy improves. Lengths follow Settings → AI Length Preferences. | USES CREDITS, WRITES SHEET |
| Optimize Title (AI) | 优化标题(AI) | Sends Instructions + the row's copy (the AI columns, or Draft Listing when they are empty) + Draft Keywords + Image; AI rewrites ONLY the AI Item Name (kept under 75 characters so Amazon shows the Highlight) and the AI Item Highlight — bullets, description and keywords stay untouched. | USES CREDITS, WRITES SHEET |
| Translate Listing (AI) | 翻译 Listing(AI) | Target languages are set in the 'Listing Drafts · Translations' tab: add one row per language — same store NAME + SKU (the country code may differ: draft myStore-US matches translation row myStore-DE) + Locale (e.g. de_DE), Status left empty. One click sends the row's AI columns (fallback: Draft Listing) and translates ALL pending locales in a single AI call, marking each row OK. To redo one language, clear its Status. | USES CREDITS, WRITES SHEET |
| Send to Publish Queue | 发送至发布队列 | Copies the clicked draft row's SKU, Product Type and AI copy into the first empty Publish Queue row (ASIN → Merchant Suggested ASIN) and marks the draft SENT. On the Translations tab it sends the translated copy; the row's Locale must match the Publish Queue Listing Locale (B3). Needs SKU + Product Type + Item Name, and the Store must match Publish Queue A3. Run Get Template for that product type FIRST — only columns already on the Publish Queue receive copy. Choose the Operation Type there. | WRITES SHEET |
| Fetch ASIN Info | 获取 ASIN 信息 | One click fetches listing info (image, brand) plus buy box price, rank and offer counts for rows with Store + ASIN; rows whose Image is already filled are skipped — clear Image to refresh. | WRITES SHEET |
| Get Restrictions | 获取限制 | Check selling restrictions for every row with Store + ASIN. | WRITES SHEET |
| Get Template | 获取模板 | Builds attribute columns (F+) with guides from Amazon's schema, for the product types in D7:D. Rows 1-3 and columns A-E are kept — safe to re-run. | WRITES SHEET |
| Fetch by ASIN | 按 ASIN 获取 | Rewrites each row from the Amazon catalog (what shoppers see) for the ASIN in the Merchant Suggested ASIN column: every attribute column is refilled and a column the catalog lacks is cleared, so no stale value survives. Only rows whose Item Name is empty run — clear the title to re-fetch. A failed ASIN keeps its values and gets ⚠ in Brand; new attributes append at the right. | WRITES SHEET |
| Fetch by SKU | 按 SKU 获取 | Rewrites each row from YOUR submitted listing (SKU in column B): every attribute column is refilled and a column the listing lacks is cleared, so no stale value survives. Only rows whose Item Name (row 6) is empty run — a filled title means done; clear it to re-fetch. A row Amazon fails keeps its values and gets ⚠ in Brand. Also step 1 of PATCH-DELETE: fetch, keep only the cells to delete. | WRITES SHEET |
| Fill from JSON | 从 JSON 填充 | Rewrites each row from the JSON pasted in Attributes JSON (col E, e.g. from Listing Snapshot): every attribute column is refilled from it and a column the JSON lacks is cleared (the summary counts them), so no stale value survives. Only rows whose Item Name is empty run — clear the title to re-fill; the blob and columns A-E stay. Invalid JSON or a failed parse leaves the row untouched and is listed. Fill productType (col D) first. | WRITES SHEET |
| Validate (Preview) | 校验(预览) | Step 1 for every change: checks rows against Amazon WITHOUT publishing (max 20; DELETE has no preview and is skipped here). Issues land in Submission Log — fix, then publish with Create/Replace/Delete (≤20, instant) or Submit Feed (bulk). | READ |
| Create/Replace/Del. | 创建/替换/删除 | Create / Replace / Delete — LIVE, runs each row by its operationType, instant per-SKU results (max 20): UPDATE creates or fully replaces the SKU; PARTIAL_UPDATE / PATCH-DELETE change or delete only the listed attributes; DELETE removes the SKU from Amazon — irreversible, no preview exists. | LIVE ON AMAZON, WRITES SHEET |
| Submit Feed | 提交 Feed | LIVE — publishes ALL rows (any operationType) as one bulk feed, up to 25,000 rows; results appear in Submission Log. | LIVE ON AMAZON, WRITES SHEET |
| Backup | 备份 | Snapshots this tab into your Listing Log spreadsheet (named by SKU + timestamp) and records the link. | WRITES DRIVE, WRITES SHEET |
| Refresh Status | 刷新状态 | Asks Amazon about every Submit Feed row that is not finished yet and fills Feed Status, Result and Issues. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
An agent can run the same Publish Queue over MCP — prepare the template with [`listings_prepare_publish_queue_template`](/docs/mcp-api/tools/listings_prepare_publish_queue_template), validate with [`listings_validate_rows`](/docs/mcp-api/tools/listings_validate_rows) and submit with [`listings_submit_feed`](/docs/mcp-api/tools/listings_submit_feed) — while you approve the rows in the sheet. Guides: [Bulk create or revise listings](/guides/bulk-create-revise-amazon-listings-in-google-sheets), [Check ASIN selling eligibility](/guides/check-asin-selling-eligibility-in-google-sheets), [Refurbish a listing](/guides/refurbish-amazon-listing-in-google-sheets).
# Data Kiosk (https://sellersheetai.com/help/sheets/sellers/data-kiosk)
> Run Amazon Data Kiosk queries — sales and traffic, economics — from sheet rows and get the results as Drive sheets.
The **Data Kiosk** panel submits Amazon Data Kiosk queries from the **Data Kiosk** sheet and brings the results back as Google Sheets in Drive.
\[\[TODO: screenshot sellers/data-kiosk]]
## Main steps [#main-steps]
### Fill a row [#fill-a-row]
From row 4, with an empty Query ID: pick the report type, aggregate and dates — or paste your own GraphQL.
### Create Queries [#create-queries]
**Create Queries** submits one query per ready row.
### Get Results [#get-results]
**Get Results** polls pending queries; finished ones download to a Drive sheet linked in the Report Sheet column.
On **Data Kiosk Lookup**, **Search Queries** lists past queries with the row-4 filters (Store required). **Clear Table** empties the data rows; headers stay.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Create Queries | 创建查询 | Sheet: Data Kiosk. Submit a query per ready row (rows 4+, empty Query ID) — pick report type, aggregate and dates, or paste custom GraphQL. | WRITES SHEET |
| Get Results | 获取结果 | Poll pending queries; finished ones download to a Drive sheet linked in the Report Sheet column. | WRITES DRIVE, WRITES SHEET |
| Clear Table | 清空表格 | Clear data rows; headers and dropdowns stay. Ctrl+Z to undo. | WRITES SHEET |
| Search Queries | 搜索查询 | Search past Data Kiosk queries using the row-4 filters (Store required); all pages load in one click. | WRITES SHEET |
| Clear Table | 清空表格 | Clear result rows; headers and filters stay. Ctrl+Z to undo. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`dataKiosk_createQuery`](/docs/mcp-api/tools/dataKiosk_createQuery) runs the same queries over MCP; the synced Data Kiosk tables are in the [data warehouse](/docs/data).
# Dropbox (https://sellersheetai.com/help/sheets/sellers/dropbox)
> Turn product images stored in Dropbox into image URLs for listings and flat files.
The **Dropbox** panel creates shareable image URLs from your Dropbox for the rows of the active sheet — for example, the image columns of a listing or a flat file.
\[\[TODO: screenshot sellers/dropbox]]
## Main steps [#main-steps]
1. Open the sheet whose rows need image URLs.
2. Click **Fetch Image URLs**: SellerSheet looks the images up in Dropbox and writes their URLs into the rows.
3. If Dropbox access has expired, click **Refresh Access** and try again.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Fetch Image URLs | 获取图片链接 | Fetch image URLs for the rows on this sheet. | WRITES SHEET |
| Refresh Access | 刷新授权 | Refresh access token. | READ |
Guide: [Create Amazon image URLs for flat files](/guides/create-amazon-image-urls-for-flat-files).
# FBA (https://sellersheetai.com/help/sheets/sellers/fba)
> Send stock to Amazon with Send to Amazon (STA) plans built in Google Sheets — box first or split first — plus labels, shipment tracking and an inventory health view.
The **FBA** panel creates and tracks FBA inbound shipments from Google Sheets, and keeps a live inventory health view of every FBA SKU. Each plan gets its own STA spreadsheet; the numbered stepper on it shows which step is DONE.
\[\[TODO: screenshot sellers/fba]]
## Main steps — create a shipment [#main-steps--create-a-shipment]
### Start the plan [#start-the-plan]
On **Manage Shipments**, add a row for the plan, click a cell in it and use **Create STA SS**: SellerSheet creates a dedicated STA spreadsheet for that shipment.
### Box first — you know your boxes [#box-first--you-know-your-boxes]
On **STA-BoxFirst**: **Initiate Plan** (from row 9 and the box lines from row 14) → **Confirm Pack** if Amazon offered several packing options → **Set Box Info** → **Gen Placement Opts.** (each placement's warehouses, weight, volume and fees land in STA-Options; price your own carrier there) → pick a placement → **Gen Trans. Opts.** → pick carriers (**Match Carriers** copies shipment 1's carrier to the rest) → **Gen Delivery Window** for own-carrier shipments → **Confirm Shipment**.
### Or split first — Amazon splits first [#or-split-first--amazon-splits-first]
On **STA-SplitFirst**: **Initiate Plan** → **Confirm Placement** (builds STA-Pack, one box block per shipment) → fill the boxes → **Set Box Info** → **Gen Trans. Opts.** → **Gen Delivery Window** (own carrier only) → **Confirm Shipment**.
### Labels and tracking [#labels-and-tracking]
**Get FBA Box Labels** saves the box labels PDF to the plan folder and links it from the FBA ID; **Get FNSKU Labels** opens item labels in a print dialog. **Get Ref. ID** and **Refresh Shipment** keep status, Reference ID and warehouse current on Manage Shipments.
**Confirm Shipment** books the shipment on Amazon, and **Cancel Plan** cancels the inbound plan — both change your account. The Ship Date must be today or later, or Amazon returns no carrier options.
## Inventory Health and past plans [#inventory-health-and-past-plans]
* **Refresh Data** (Inventory Health) reloads the hidden data layer from the SellerSheet warehouse for the stores in the Stores filter (A4); the live table re-queries instantly. No Amazon call.
* **List Inbound Plans** (Search Inbound Plans) lists your inbound plans of the last 365 days using the row-4 filters.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Refresh Data | 刷新数据 | Refresh the hidden data layer from the SellerSheet database — stores picked in the Stores filter (A4); the live table re-queries instantly. No Amazon call. Runs on the Inventory Health sheet — clicked elsewhere it jumps there (creating the tab if needed) so you can run it again. | WRITES SHEET |
| Create STA SS | 创建 STA 表格 | Create an STA spreadsheet for the active row’s shipment. | WRITES DRIVE, WRITES SHEET |
| Refresh Shipment | 刷新货件 | Refresh status for every non-terminal shipment on this sheet from Amazon. | WRITES SHEET |
| Initiate Plan | 创建入库计划 | Creates the inbound plan from row 9 and the box lines (row 14+) and lists Amazon's packing options; a single packing group is confirmed with its box info at once (1a–1c DONE). Several groups mean the items cannot ship together: the error lists each group's SKUs below the items — cancel, keep one group's SKUs and run again. | LIVE ON AMAZON, WRITES SHEET |
| Confirm Pack | 确认装箱 | Re-confirms the packing option ID in the stepper's 1b cell (1b DONE); Initiate Plan normally does this for you. | LIVE ON AMAZON, WRITES SHEET |
| Set Box Info | 填写箱子信息 | Re-sends every box line's dimensions and weight (row 14+, units in H9/I9) for the packing group in the stepper's 1c cell — after you edit the box lines (1c DONE); refused once the shipment is confirmed. | LIVE ON AMAZON, WRITES SHEET |
| Gen Placement Opts. | 生成分仓方案 | Fetches Amazon's placement options and fees; each shipment's warehouse, weight and volume land in STA-Options, where Rate/kg ✎ or Rate/m³ ✎ prices your own carrier. Pick one in the stepper's 2 cell. Click again to refresh from Amazon (rates carry over by warehouse). | WRITES SHEET |
| Gen Trans. Opts. | 生成运输方案 | Fetches carrier options (cost, mode, partnered or own) for every placement's shipments into the STA-Options Transportation dropdowns and rebuilds STA-PL; pick per shipment there (3 DONE). | WRITES SHEET |
| Match Carriers | 匹配承运商 | Run on the STA-Options tab: for every placement with 2+ shipments, shipment 1's picked Transportation Option fills the rest with the same carrier (SPD / LTL partnered rules). | WRITES SHEET |
| Gen Delivery Window | 生成送达时间窗 | Own-carrier shipments only: fetches delivery windows for the picked placement's shipments (every placement when none is picked) into the STA-Options Delivery Window dropdowns (3b DONE). | WRITES SHEET |
| Confirm Shipment | 确认货件 | Confirms the placement picked in the stepper's 2 cell and each shipment's Transportation + Delivery Window from STA-Options — books on Amazon. FBA ID, Reference ID and warehouse land in row 12, STA-Options (the FBA ID becomes the label link when Amazon returns labels) and Manage Shipments (2 and 4 DONE). | LIVE ON AMAZON, WRITES SHEET |
| Get Ref. ID | 获取参考 ID | Re-reads each confirmed shipment from Amazon: status, Reference ID and warehouse refresh in STA-Options and row 12; the Reference ID is mirrored to Manage Shipments. | WRITES SHEET |
| Get FBA Box Labels | 获取 FBA 箱标 | Fetches Amazon box labels for the picked placement's shipments whose FBA ID in STA-Options is not a link yet (page count from that row; cut to the FBA Box Label Size you chose in row 9 — required: 100x150 as is, 100x100 top square). Saves the PDF to the plan folder, turns the FBA ID into its link and mirrors it to Manage Shipments. Remove a link to fetch again. | WRITES DRIVE, WRITES SHEET |
| Get FNSKU Labels | 获取 FNSKU 标签 | Builds FNSKU item labels from the items table — one per unit (Qty/Box × Boxes), at the FNSKU Label Size you chose in row 9 (required) — and opens them in a print dialog; nothing is written to the sheet. | READ |
| Cancel Plan | 取消计划 | Cancels the inbound plan on Amazon; every stepper step and the Status cell become CANCELLED. | LIVE ON AMAZON, WRITES SHEET |
| Initiate Plan | 创建入库计划 | Creates the inbound plan from row 9 and the item lines (row 14+) and lists Amazon's placement options in STA-Options and the stepper's 2 dropdown (1 DONE). | LIVE ON AMAZON, WRITES SHEET |
| Confirm Placement | 确认分仓 | Confirms the placement picked in the stepper's 2 cell with Amazon and builds STA-Pack, one box block per shipment (2 DONE). | LIVE ON AMAZON, WRITES SHEET |
| Set Box Info | 填写箱子信息 | Sends STA-Pack's box rows (dimensions + weight per shipment, units in H9/I9) to Amazon as packing information; needs 2 DONE (3 DONE). | LIVE ON AMAZON, WRITES SHEET |
| Gen Trans. Opts. | 生成运输方案 | Fetches carrier options (cost, mode, partnered or own) for the confirmed placement's shipments into the STA-Options Transportation dropdowns; needs Ship Date and 3 DONE (4 DONE). | WRITES SHEET |
| Gen Delivery Window | 生成送达时间窗 | Own-carrier shipments only: fetches delivery windows for the confirmed placement's shipments into the STA-Options Delivery Window dropdowns (5 DONE). | WRITES SHEET |
| Confirm Shipment | 确认货件 | Confirms each shipment's Transportation + Delivery Window from STA-Options — books on Amazon. FBA ID, Reference ID and warehouse land in row 12, STA-Options (the FBA ID becomes the label link when Amazon returns labels) and Manage Shipments (6 DONE). | LIVE ON AMAZON, WRITES SHEET |
| Get FBA Box Labels | 获取 FBA 箱标 | Fetches Amazon box labels for the picked placement's shipments whose FBA ID in STA-Options is not a link yet (page count from that row; cut to the FBA Box Label Size you chose in row 9 — required: 100x150 as is, 100x100 top square). Saves the PDF to the plan folder, turns the FBA ID into its link and mirrors it to Manage Shipments. Remove a link to fetch again. | WRITES DRIVE, WRITES SHEET |
| Get FNSKU Labels | 获取 FNSKU 标签 | Builds FNSKU item labels from the items table — one per unit (Qty/Box × Boxes), at the FNSKU Label Size you chose in row 9 (required) — and opens them in a print dialog; nothing is written to the sheet. | READ |
| Cancel Plan | 取消计划 | Cancels the inbound plan on Amazon; every stepper step and the Status cell become CANCELLED. | LIVE ON AMAZON, WRITES SHEET |
| List Inbound Plans | 列出入库计划 | List your inbound plans (last 365 days) using the row-4 filters; newest first. | WRITES SHEET |
| Setup Sheet | 设置表格 | Create or reset the Search Inbound Plans sheet header block. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
An agent can build the same STA workbook with [`fbaInbound_create_sta_sheet`](/docs/mcp-api/tools/fbaInbound_create_sta_sheet) and walk the plan over MCP, from [`fbaInbound_createInboundPlan`](/docs/mcp-api/tools/fbaInbound_createInboundPlan) to [`fbaInbound_get_labels`](/docs/mcp-api/tools/fbaInbound_get_labels). Guides: [Create STA shipments](/guides/create-sta-shipments-in-google-sheets), [Inventory health dashboard](/guides/inventory-health-dashboard).
# Images (https://sellersheetai.com/help/sheets/sellers/images)
> Your product image library, plus AI listing images generated from reference styles and your own product photos.
The **Images** panel has two sheets: **Image Library**, a grid of every image slot of your listings, and **Images Generation**, where AI creates new listing images from a reference style and your product samples.
\[\[TODO: screenshot sellers/images]]
## Image Library [#image-library]
Type the Store (A4) and a SKU or parent SKU (B4) and click **Fetch Images**: one column per image slot, two rows per child SKU — the plain CDN URLs, then an `=IMAGE()` preview row to confirm, delete, and paste the rest into Publish Queue.
## Main steps — generate images [#main-steps--generate-images]
### Load your product and a reference [#load-your-product-and-a-reference]
**Fetch by SKU** brings in your own product: a summarized title and bullets as Product Context, the main image as Sample 1. **Fetch by ASIN** writes a reference listing's images into each slot's Ref cell, as style references only.
### Write the prompts [#write-the-prompts]
Click a reference image and run **Reverse Prompt**: a vision model turns it into a structured prompt. **Optimize Prompt** adapts it to your product — same style and composition, your product. Prefer the reversed prompt as is? Copy it into the Prompt cell.
### Generate [#generate]
**Generate** runs the selected slots from their Prompt; with samples selected it edits so the product stays identical. **Swap Product In** keeps a reference image's exact scene and replaces only the product. Results save automatically in a few minutes — keep the sidebar open.
### Score [#score]
**Score Results** rates each slot's versions against its prompt and Amazon's main-image rules.
Every AI step is billed from your Credits balance and refunded if it fails. **Preview Images** opens a slideshow of the images on the selection.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Fetch Images | 获取图片 | Reads Store (A4) and SKU / parent SKU (B4) from the Image Library sheet and rebuilds the grid: one column per image slot, s0-s8 first (the Publish Queue block), A+/other slots appended. Each child SKU gets two rows — plain CDN URLs, then an =IMAGE() preview row to confirm, delete, and paste the rest into Publish Queue. | WRITES SHEET |
| Fetch by SKU | 按 SKU 获取 | Your OWN listed product: AI-summarized title+bullets → Product Context, main image → Sample 1, every listing image URL → the SKU cell's note. | WRITES SHEET |
| Fetch by ASIN | 按 ASIN 获取 | Reads the Ref ASIN in column D (competitor / reference listing) and writes its images into each S-slot's Ref cell BY POSITION (main→S0, PT01→S1 …) as STYLE references only. A+ block refs: paste manually. | WRITES SHEET |
| Preview Images | 预览图片 | Slideshow modal of the images on the current selection (the Useful-Tools previewer). | READ |
| Reverse Prompt | 反推提示词 | Click a REFERENCE image first (a block's Ref cell, or Ref A-C) — a vision model reverses it into a structured prompt, written to the block's Reversed Prompt (Ref A-C target the Scope slots above). | USES CREDITS, WRITES SHEET |
| Optimize Prompt | 优化提示词 | Adapts each Scope slot's Reversed Prompt to YOUR product: keeps the reference's style/composition, swaps the product for the Scope-selected Sample(s) + Product Context → slot Prompt (previous kept in the cell note). Prefer the reversed prompt as-is? Just copy it into the Prompt cell. | USES CREDITS, WRITES SHEET |
| Generate | 生成 | Runs the Scope-selected slots from each slot's Prompt. A slot's own Ref attaches as a STYLE anchor only when it has NO Reversed Prompt — an optimized Prompt already carries the ref's style as text. Samples selected → EDIT (product identical to samples) · neither samples nor ref → text-to-image. To keep a Ref's exact scene, use Swap Product In. Files are saved as SKU_S0 / SKU_S0_V2 / SKU_A1 … in Images//. Edit jobs finish in the background and save automatically (~5 min — keep the sidebar open). | USES CREDITS, WRITES SHEET |
| Swap Product In | ⇄ 场景换品 | Keeps each Scope slot's Ref image as the EXACT scene and replaces only the product with the Scope-selected Sample(s) — one edit call per slot, Ref goes first, no Prompt cell needed. Slots without a Ref are skipped (BLOCKED). The optional Instruction is appended to the swap prompt. Results queue and save automatically like Generate. | USES CREDITS, WRITES SHEET |
| Score Results | 评分 | Queued jobs save automatically (~5 min, keep the sidebar open). This button AI-rates each Scope slot's V1-V3 against its prompt + Amazon main-image compliance → Scores column. | USES CREDITS, WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`generate_image`](/docs/mcp-api/tools/generate_image), [`edit_image`](/docs/mcp-api/tools/edit_image) and [`reverse_prompt`](/docs/mcp-api/tools/reverse_prompt) give an agent the same image steps over MCP.
# Sales (https://sellersheetai.com/help/sheets/sellers/sales)
> Sync your Amazon orders into the Sales spreadsheet, refresh any single order, and generate PDF invoices in bulk.
The **Sales** panel keeps an up-to-date copy of your Amazon orders in Google Sheets and turns shipped orders into invoices. It works on the **SellerSheet Sales** spreadsheet (open it from the panel's Resources links).
\[\[TODO: screenshot sellers/sales]]
## Main steps [#main-steps]
### Sync orders [#sync-orders]
Click **Sync Orders** — it works from any sheet. The first run brings in the last 30 days; after that it fetches everything since the last sync and keeps itself running about every 2 hours, together with the fees sync. Click it any time for an immediate refresh.
### Refresh or look up one order [#refresh-or-look-up-one-order]
On the **Orders** sheet, click the Amazon Order ID cell of an order, then **Update Order** to refresh that row from Amazon. **Order Details** fetches the line items of the selected order.
### Create invoices [#create-invoices]
Fill your company details once on the **Store Info** sheet. On the **Invoices** sheet, give each row a Store and an Order ID, then click **Create Invoices**: every row without a link yet gets a PDF invoice in Drive (the order must be Shipped).
**Clear Orders** empties every data row of the Orders sheet (headers stay) — press Ctrl+Z right after if you clicked it by mistake.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Sync Orders | 同步订单 | Syncs new and changed orders into the Orders sheet, continuing where the last run stopped, then keeps itself running about every 2 hours. Only the spreadsheet's owner syncs. | WRITES SHEET |
| Re-sync | 重新同步 | Clears this tab and reads the ticked stores again from scratch, as far back as First sync reads. | WRITES SHEET |
| Update Order | 更新订单 | Click the Amazon Order ID cell of an order first, then this refreshes that row from Amazon. | WRITES SHEET |
| Clear Orders | 清空订单 | Clears ALL data rows from the Orders sheet (headers kept). Ctrl+Z to undo right after. | WRITES SHEET |
| Order Details | 获取订单明细 | Fetches line items of the selected order from Amazon. | WRITES SHEET |
| Create Invoices | 生成发票 | On the Invoices sheet: generates a PDF invoice in Drive for every row with Store + Order ID and no link yet (order must be Shipped; company info from Store Info sheet). | WRITES DRIVE, WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
The same orders are available over MCP and the API: [`orders_searchOrders`](/docs/mcp-api/tools/orders_searchOrders) and [`orders_getOrder`](/docs/mcp-api/tools/orders_getOrder), or the synced `rpt_orders` table through [`query_report_data`](/docs/mcp-api/tools/query_report_data). Guide: [How to Sync Amazon Orders to Your Google Sheets](/guides/sync-amazon-orders-to-your-google-sheets).
# Shipments (https://sellersheetai.com/help/sheets/sellers/shipments)
> B2B shipping orders, tracking, and packing lists built from your sheet rows.
The **Shipments** panel handles shipments outside the FBA inbound flow: B2B shipping orders with tracking, and packing-list spreadsheets.
\[\[TODO: screenshot sellers/shipments]]
## Main steps [#main-steps]
* **B2B Shipping:** click a row of the **Shipment** sheet and **Create B2B Order** to create its shipping order; **Get Tracking Status** refreshes the tracking of every shipment on the sheet.
* **Packing List:** **Create PL SS** creates a packing-list spreadsheet from the sheet's rows; **Fill PL** fills the packing list in the active spreadsheet.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Create B2B Order | 创建 B2B 订单 | Creates a B2B shipping order for the clicked Shipment row. | WRITES SHEET |
| Get Tracking Status | 获取追踪状态 | Refreshes tracking status for the shipments on this sheet. | WRITES SHEET |
| Create PL SS | 创建装箱单表格 | Creates the packing list from this sheet's rows. | WRITES DRIVE, WRITES SHEET |
| Fill PL | 填写装箱单 | Active spreadsheet. Fill packing list. | WRITES SHEET |
For FBA inbound shipments to Amazon, use the [FBA](/help/sheets/sellers/fba) panel.
# Store Reports (https://sellersheetai.com/help/sheets/sellers/store-reports)
> Request any Amazon SP-API report on demand from a sheet row and get the finished report in Google Drive.
The **Store Reports** panel requests Amazon SP-API reports on demand and downloads them to Google Drive. The reports SellerSheet syncs for you on a schedule are already in the [data warehouse](/docs/data); use this panel for anything else, or a one-off date range.
\[\[TODO: screenshot sellers/store-reports]]
## Main steps [#main-steps]
### Fill a row [#fill-a-row]
On the **Store Reports** sheet, from row 4: Store (e.g. `myStore-US`), the Report Type, and the dates for reports that take a range.
### Create Reports [#create-reports]
Click **Create Reports**: SellerSheet submits each request to Amazon and fills in the Report ID.
### Get Reports [#get-reports]
Amazon takes a few minutes. Click **Get Reports** to poll: finished reports download to Drive and are linked in their row.
On **Report Lookup**, **Search Reports** finds past Amazon reports with the row-4 filters. **Clear Table** empties the data rows of either sheet; headers and dropdowns stay.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Create Reports | 创建报告 | Request Amazon reports from rows 4+ (Store, Report Type, dates); the Report ID fills in automatically. | WRITES SHEET |
| Get Reports | 获取报告 | Poll pending reports; finished ones download to Drive and link in the row. | WRITES DRIVE, WRITES SHEET |
| Clear Table | 清空表格 | Clear data rows; headers and dropdowns stay. Ctrl+Z to undo. | WRITES SHEET |
| Search Reports | 搜索报告 | Search past Amazon reports using the row-4 filters. | WRITES SHEET |
| Clear Table | 清空表格 | Clear result rows; headers and filters stay. Ctrl+Z to undo. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`reports_createReport`](/docs/mcp-api/tools/reports_createReport) and [`reports_getReport`](/docs/mcp-api/tools/reports_getReport) do the same over MCP; synced reports are one [`query_report_data`](/docs/mcp-api/tools/query_report_data) call away. Guides: [Download Amazon reports](/guides/download-amazon-reports-in-google-sheets), [Create store reports](/guides/create-store-reports-in-google-sheets).
# Vendor Orders (https://sellersheetai.com/help/sheets/vendors/vendors)
> For Amazon Vendors — sync purchase orders, load their line items with images, acknowledge them, and track item-level status.
The **Vendors** master tab has one panel, **Vendor Orders**, for Amazon Vendor Central accounts. It works on three sheets: **Vendor Orders**, **Vendor PO Items** and **Vendor PO Status**.
\[\[TODO: screenshot vendors/vendors]]
## Main steps [#main-steps]
### Sync purchase orders [#sync-purchase-orders]
On **Vendor Orders**, set the row-4 filters (the default is the last 7 days) and click **Sync Vendor Orders**.
### Load the items [#load-the-items]
Click a PO row and **Load PO Items**: its line items land on **Vendor PO Items**, with product thumbnails.
### Acknowledge [#acknowledge]
Give every item row an Ack Code (Backordered needs a Ship Date, Rejected needs a Reason) and click **Acknowledge PO** — this submits the acknowledgement to Amazon.
### Track status [#track-status]
On **Vendor PO Status**, **Refresh PO Status** loads item-level status with the row-4 filters.
**Clear Table** empties the data rows of a sheet; headers, filters and dropdowns stay.
## Every button [#every-button]
| Button | 中文 | What it does | Effect |
|---|---|---|---|
| Sync Vendor Orders | 同步供应商订单 | Fetch vendor POs from Amazon using the row-4 filters; defaults to the last 7 days. | WRITES SHEET |
| Load PO Items | 加载 PO 商品 | Loads the clicked PO row's line items into the Vendor PO Items sheet and auto-fills product images (thumbnails in column A, URL in the last column). | WRITES SHEET |
| Clear Table | 清空表格 | Clear data rows; headers, filters and dropdowns stay. Ctrl+Z to undo. | WRITES SHEET |
| Acknowledge PO | 确认接单(PO) | Submit PO acknowledgements to Amazon — every row needs Ack Code 1; Backordered needs a Ship Date, Rejected needs a Reason. | LIVE ON AMAZON, WRITES SHEET |
| Clear Table | 清空表格 | Clear data rows; image formula, headers and dropdowns stay. Ctrl+Z to undo. | WRITES SHEET |
| Refresh PO Status | 刷新 PO 状态 | Refresh item-level PO status using the row-4 filters (defaults to the last 7 days) and auto-fill product images for new rows. | WRITES SHEET |
| Clear Table | 清空表格 | Clear data rows; image formula, headers and filters stay. Ctrl+Z to undo. | WRITES SHEET |
## Prefer to ask an agent? [#prefer-to-ask-an-agent]
[`vendorOrders_getPurchaseOrders`](/docs/mcp-api/tools/vendorOrders_getPurchaseOrders) and [`vendorOrders_submitAcknowledgement`](/docs/mcp-api/tools/vendorOrders_submitAcknowledgement) do the same over MCP.
# AI clients & API (https://sellersheetai.com/help/troubleshooting/ai)
> Every refusal says what went wrong and what to do. Here is each one, and its fix.
Every refusal carries a sentence in `notification.message` — your agent reads it to you — and, when only you can fix it, a note in `human_action`. The HTTP status says which kind it is ([Responses & errors](/docs/mcp-api/responses)).
## Signing in [#signing-in]
| Symptom | What it means | Fix |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| "Unauthorized" (401) | Your sign-in or key is missing, expired, turned off or deleted — or it's the wrong kind (an MCP key on the Tool API, or the other way round) | Sign in again in your client, or create a new key under **Settings → API & MCP** |
| The browser never opens | The client is older than MCP sign-in | Update the client, or use an [API key](/docs/mcp-api/keys) |
| Sign-in says you've reached your keys | Each browser sign-in creates an MCP key, and your plan's keys are all in use | Delete an unused key under **Settings → API & MCP**, or upgrade |
| 403 for a key that used to work | You are no longer an active member of the workspace the key belongs to | Ask the workspace owner, or use a key of your own |
## Stores [#stores]
| Symptom | What it means | Fix |
| -------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Store ref refused (400) | The ref has no marketplace, like a bare `myStore` | Pass a ref with its marketplace, like . The error lists every ref that works — or take one from `get_user_context` ([Store refs](/docs/mcp-api/store-refs)) |
| "Store is paused" (403) | None of its marketplaces is active on your plan | Upgrade, or free a slot under **My Stores → Edit Marketplaces** (in the app: **Settings → Stores & Marketplaces → Edit markets**) |
| "No stores" | No store is connected yet, or none is shared with you | [Connect your store](/docs/start/connect) |
| Ad tools come back empty | Ads was never authorized for that store | **Ads** on the store's row in **Settings → Stores & Marketplaces** |
| The store shows an authorization error | Amazon's authorization was revoked or expired | **Reauthorize on Amazon** on the store's row |
## Permissions [#permissions]
| Symptom | What it means | Fix |
| ------------------------------------- | ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| 403 on a write tool | The key or your membership has read access on that store | Use a key with write access on it, or ask the workspace owner for it ([Stay in control](/docs/mcp-api/control)) |
| 403 on a store you can see in the app | The key is **Restricted** and that store isn't on its list, or its reach is one workspace | Add the store to the key, or use another key |
## Limits and Amazon [#limits-and-amazon]
| Symptom | What it means | Fix |
| ------------------------ | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| 429 with `Retry-After` | A plan window is full, or Amazon's own quota for that operation | Wait the seconds `Retry-After` says, then retry ([Credits & limits](/help/app/settings/billing)) |
| 402 | Not enough Credits for an image, copy or insights action | Top up on **Settings → Billing & Credits** — nothing was charged |
| 400 with Amazon's errors | Amazon refused the request — a wrong attribute, a missing field | Read `errors`: it is Amazon's own list; fix the input and send again |
| 503 | Amazon, noon or SellerSheet could not answer just then | Retry after `Retry-After` |
| A call times out | Some Amazon reports take a minute or two | Raise your client's MCP tool timeout; on the Tool API, run long workflows over MCP instead |
## Sheets [#sheets]
| Symptom | Fix |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Your agent can't write to your sheet | Open Google Sheets → **Extensions → SellerSheet → Open Sidebar** once to set up the workspace |
| A file "isn't yours" | Drive and sheet tools work only on files you own or that are shared with you, inside your workspace — share the file with your Google account |
Still stuck? Write to [support@sellersheetai.com](mailto:support@sellersheetai.com) with the time of the call.
# Web app (https://sellersheetai.com/help/troubleshooting/app)
> Errors in the SellerSheet web app, and their fixes.
When something in the SellerSheet app goes wrong, it tells you in one sentence — on the page, or in a short message after you click. Find yours below, or [contact support](/help/contact) with that sentence.
| Error | For example |
| --------------------------------------------------- | ------------------------------------------------------------------------- |
| [You're signed out](#app-signed-out) | The sign-in page, "Sign in to SellerSheet" |
| [Not enough Credits](#app-credits) | "Not enough credits: this needs …, you have …." |
| [A plan limit is reached](#app-plan-limit) | "The team is full — upgrade the plan for more seats" |
| [No access to this store or action](#app-no-access) | "… needs write access to that store — yours is read-only." |
| [A store's authorization expired](#app-store-auth) | "Store authorization expired — re-authorize to restore access" |
| [Page not found](#app-not-found) | "This page does not exist, or your account cannot open it." |
| [The server did not answer](#app-server) | "The server did not answer. Nothing was changed — try again in a moment." |
## You're signed out [#app-signed-out]
**What you see:** the sign-in page, "Sign in to SellerSheet", instead of the page you opened · "That sign-in link has expired — start again." · "Google sign-in did not finish — try again." · "No SellerSheet account uses this email — sign up with Google first."
The app needs you signed in. Your session ends when you log out, when you use **Log out everywhere**, or 14 days after you last opened the app.
1. Click **Continue with Google**, or **Email me a code** and type the 6-digit code from the email.
2. After you sign in, the app opens the page you asked for.
3. "That sign-in link has expired" or "did not finish": start again from the sign-in page.
4. "No SellerSheet account uses this email": the code works only for an existing account. Sign in with Google first.
## Not enough Credits [#app-credits]
**What you see:** "Not enough credits: this needs …, you have …." · "This batch costs … credits and the balance is … — nothing was started. Top up on Billing & Credits."
An AI action — images, listing copy, buyer insights — is paid from your organization's Credits balance, and the balance can't cover it. The action was refused before it ran, so nothing was charged.
1. Open **Settings → Billing & Credits** and click **Top up**. Only the owner or an admin can buy Credits; a member asks one of them.
2. Run the action again. A failed action costs nothing.
See [Billing & Credits](/help/app/settings/billing).
## A plan limit is reached [#app-plan-limit]
**What you see:** "The team is full — upgrade the plan for more seats" · "Your plan allows … keys of this kind and all are in use — delete or turn off one, or upgrade the plan." · "Your … plan has room for … more marketplaces (… of … in use, noon included). Pick fewer, or upgrade." · "Sync paused — no marketplace on this store is active on your plan, so its reports have stopped updating. Upgrade your plan, or free a slot under Edit Marketplaces."
Your plan sets how many people, keys and marketplaces your organization has. Amazon marketplaces and noon accounts share the marketplace count. A store with no active marketplace stops syncing.
1. See your plan and its limits on **Settings → Billing & Credits**.
2. Free a slot: turn off a marketplace you don't need with **Edit markets** on **Stores & Marketplaces** (one marked "On until …" stays on until that date); delete or turn off a key on **API & MCP**; withdraw an invitation on **Members** — an invitation holds a seat until it is accepted or withdrawn.
3. Or upgrade. Only the organization's owner can change the plan.
See [Billing & Credits](/help/app/settings/billing), [Stores & Marketplaces](/help/app/settings/stores), [Members](/help/app/settings/members) and [Keys & store access](/docs/mcp-api/keys).
## No access to this store or action [#app-no-access]
**What you see:** "Mapping a listing on … needs write access to that store — yours is read-only." · "Placing images on … needs write access to that store — yours is read-only." · "Only the owner or an admin of this organization can add or re-authorize stores." · "This workspace is no longer one of your organizations — reload the page to open your own."
You are signed in, but your role or your access to that store doesn't allow this. The owner and admins reach every store. A member reaches only the stores granted to them, each with **Seller API** and **Ads API** access set to None, Read or Read & write. Adding or re-authorizing stores and buying Credits are for the owner or an admin; the plan is for the owner alone.
1. Read-only on a store: ask the owner or an admin to open **Settings → Members**, click **Access** on your row and set that store's **Seller API** or **Ads API** to **Read & write**.
2. An owner-or-admin action: ask one of them to do it, or to change your **Role** on Members.
3. "This workspace is no longer one of your organizations" or "You are not a member of that workspace.": you left or were removed. Reload the page — the app opens your own organization.
4. Your AI client has its own access, set per key: see [Stay in control](/docs/mcp-api/control).
See [Members](/help/app/settings/members) and [Organization](/help/app/settings/organization).
## A store's authorization expired [#app-store-auth]
**What you see:** on **Stores & Marketplaces**, **Expired**, **Revoked** or **Expiring** under Store authorization or Ads authorization, and in Issues: "Store authorization expired — re-authorize to restore access" · "Store auth expires in … days — re-authorize before it lapses" · "Ads authorization revoked — reauthorize ads". A noon account shows **Sign-in failed** or **Role missing**.
Amazon's authorization of a store lasts 365 days; the app marks it Expiring in the last 30. It can also be revoked sooner — then Issues shows "Auth Error:" with the reason. Until you authorize again, SellerSheet can't reach the store on Amazon — from the app, the sidebar or your AI.
1. On **Settings → Stores & Marketplaces**, open the store's **Issues** and click its fix — **Reauthorize** or **Reauthorize Ads** — or use **Reauthorize** or **Ads** on the store's row.
2. Sign in on Amazon's consent screen with the seller account the store belongs to. A different seller account is refused.
3. When the app asks you to **Confirm the re-authorization**, compare the marketplaces under Now and After you confirm, then click **Confirm re-authorization**. Cancel keeps the current authorization.
4. For noon, click **Recheck**, or **Reconnect** for an account you connected by signing in on noon.
Only the owner or an admin has these buttons; a member asks one of them. See [Stores & Marketplaces](/help/app/settings/stores).
## Page not found [#app-not-found]
**What you see:** "404" · "Page not found" · "This page does not exist, or your account cannot open it."
The address matches no page, or it is a page your account can't open — the app shows both the same way.
1. Click **Go to Home** and find the page from the menu.
2. A link from a teammate can point at a page only some accounts open, like **Affiliate**, which only partners see.
## The server did not answer [#app-server]
**What you see:** "Your workspace could not be loaded" with "The sign-in service did not answer. Nothing was changed — try again in a moment." · "This page could not load" with "The server did not answer. Nothing was changed — try again in a moment." · "The server answered with an error (HTTP …). Nothing was changed."
The app could not reach SellerSheet's server in time, or the server failed. Nothing was changed.
1. Click **Try again**. On "Your workspace could not be loaded", a second click reloads the whole page.
2. The same sentence in a message after you clicked a button: your change was not saved. Make it again in a moment.
3. Still there after a few minutes? [Contact support](/help/contact) with the exact sentence, the screen and the time.
# Sheets sidebar messages (https://sellersheetai.com/help/troubleshooting/sheets)
> Every message the Google Sheets sidebar shows belongs to one of nine families. Find yours by its words, and fix it.
Every message the sidebar shows belongs to one of these nine. Find yours by its words — or [contact support](/help/contact) with the message. Look for the sentence itself: the sidebar sometimes puts the button's name and "failed:" in front of it.
| Family | For example |
| ------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [The store is missing or doesn't match](#err-store-ref) | "Please enter the store (e.g. myStore-US) in cell A4." |
| [A step was skipped](#err-step-order) | "Missing Inbound Plan ID. Run step 1 first." |
| [The wrong tab is open](#err-wrong-tab) | "Wrong sheet! Expected sheet name starts with: …. You are in: …." |
| [The wrong row is selected](#err-wrong-row) | "Click a product data row (row 5+) first." |
| [A ✎ column is empty or invalid](#err-input) | "Missing required fields: …" |
| [A template tab is damaged](#err-template) | "Sheet has no header row — restore the tab from the master template." |
| [Sign-in or Amazon authorization](#err-auth) | "Your authorization was revoked, please reauthorize on sellersheetai.com/dashboard" |
| [Plan limits, Credits or file size](#err-quota) | "Not enough credits: this needs …, you have …." |
| [SellerSheet, Amazon or noon failed](#err-server) | "Create failed — see server logs." |
## The store is missing or doesn't match [#err-store-ref]
**What you see:** "Please enter the store (e.g. myStore-US) in cell A4." · "Please set store name with country code in cell B2" · "Store is missing in the selected row." · "Store (A3) is empty — select the store in row 3 first."
Actions that talk to Amazon or noon need the store, written `-`: your store's name plus the marketplace's country code. The cell the message names is empty, or doesn't match one of your stores exactly.
1. Find the exact name: SellerSheet app → **Settings → Stores & Marketplaces**, or the sidebar's mini Dashboard.
2. Type it in the cell the message names, with the marketplace: , `myStore-UK`… Many of these cells offer a dropdown.
3. Click the button again.
Most often from: [Sponsored Products](/help/sheets/ads/sp), [Sponsored Brands](/help/sheets/ads/sb), Ads suggestions, [FBA](/help/sheets/sellers/fba). See also [Store refs](/docs/mcp-api/store-refs).
## A step was skipped [#err-step-order]
**What you see:** "Missing Inbound Plan ID. Run step 1 first." · "STA-Options sheet not found. Run Phase 1 first." · "No placement option confirmed. Complete Phase 2 first." · "Nothing to stage — run Get Suggestions first."
The button needs the result of an earlier button in the same group — usually an ID that step writes into the sheet.
1. In the sidebar, the group named after your tab lists the steps in order (1, 2, 3…). On an STA spreadsheet, the numbered stepper shows which step is DONE.
2. Run the step the message names, wait for its notification, then click your button again.
3. Steps marked *Optional · when Initiate asks* run only when the earlier step says so.
Most often from: [FBA](/help/sheets/sellers/fba) (STA box first / split first), the Sponsored Products Builder, Ads suggestions.
## The wrong tab is open [#err-wrong-tab]
**What you see:** "Wrong sheet! Expected sheet name starts with: …. You are in: …." · "This function only works from STA or Manage Shipments sheets." · "Not the Shipment tab — open the Shipment tab first." · "Sync Catalog runs on a Catalog tab — open the SellerSheet catalog workbook (or any sheet that has one) and run again."
The button works on one tab, and another tab is open. Buttons under *Sheet-specific · active tab must match* sit in a group named after the tab they need. For "Wrong sheet!", the open tab's name must start with the name the message gives.
1. Read the tab the message names — or the name of the button's group in the sidebar.
2. Click that tab at the bottom of the spreadsheet. If it is in another workbook, open that workbook first: the panel's Resources links open its spreadsheet.
3. Renamed the tab? Give it back a name that starts with the expected one. Deleted it? See [A template tab is damaged](#err-template).
4. Click the button again.
Most often from: [Catalogs](/help/sheets/sellers/catalogs), [A+ Content](/help/sheets/sellers/a-plus), [FBA](/help/sheets/sellers/fba), [Shipments](/help/sheets/sellers/shipments).
## The wrong row is selected [#err-wrong-row]
**What you see:** "Click a product data row (row 5+) first." · "Please select a data row (not a header row)." · "No rows selected. Tick the Select box (column A) on the rows you want to edit, then try again." · "Click the draft row (row 4 or below) first, then Send to Publish Queue."
The button works on rows of the sheet, and it found none: your cursor is in the header rows at the top, or no row is ticked.
1. Read the first data row the message gives — "row 5+", "row 4 or below". Everything above it is header.
2. A button for one row: click any cell in that row. A button for several rows (Edit, Delete, Archive, Apply Selected): tick the **Select** box in column A of each row.
3. Click the button again.
Most often from: [Images](/help/sheets/sellers/images), [FBA](/help/sheets/sellers/fba) (Manage Shipments), [Sponsored Products](/help/sheets/ads/sp), [Sponsored Brands](/help/sheets/ads/sb), [Sponsored Display](/help/sheets/ads/sd), [Catalogs](/help/sheets/sellers/catalogs).
## A ✎ column is empty or invalid [#err-input]
**What you see:** "Missing required fields: …" · "Row …: "Box Weight" must be a positive number — got: …." · "… row(s) blocked before Amazon — fix the ⚠️ reasons in the Status column, then Create again." · "Warehouse Code "…" not found on the Shipment Setting sheet — add its row (gold ✎ columns) first."
A column you fill — its header carries ✎ — is empty, or holds a value the button can't use. These checks run before anything is sent to Amazon or noon.
1. Read the field, row and value the message names. When rows are refused, each row's reason is in its **Status** column.
2. Fill or fix that ✎ cell. Hover the header for its note: whether it is required, the format it takes and the values it allows. Many ✎ cells offer a dropdown.
3. If the message names another tab, like Shipment Setting, add the missing row there first.
4. Click the button again.
Most often from: [FBA](/help/sheets/sellers/fba), [Catalogs](/help/sheets/sellers/catalogs) (the Publish Queue), [Sponsored Products](/help/sheets/ads/sp), [Sponsored Brands](/help/sheets/ads/sb), [Sponsored Display](/help/sheets/ads/sd), [Shipments](/help/sheets/sellers/shipments).
## A template tab is damaged [#err-template]
**What you see:** "Sheet has no header row — restore the tab from the master template."
A template tab lost its header rows or columns. **Fix:** in the sidebar, open **Settings → Workspace → Re-Initiate Resources**: it re-creates whatever is missing and leaves everything that still exists alone. A re-created tab is an empty template, so make a copy first (File → Make a copy) if you want to keep old data.
## Sign-in or Amazon authorization [#err-auth]
**What you see:** "Your authorization was revoked, please reauthorize on sellersheetai.com/dashboard" · "Store … is expired. Please reauthorize." · "No connected noon store named '…'. Connect it on the dashboard." · "No Amazon stores connected. Please authorize your store on the website first. Once authorized or store is shared with you, click Refresh Workspace to update."
The sidebar reaches Amazon, Amazon Ads and noon with the authorization you gave in the SellerSheet app. Amazon's authorization of a store lasts 365 days, and it can be revoked sooner. Until you authorize again, every button for that store stops.
1. Open the SellerSheet app → **Settings → Stores & Marketplaces**. The store's row shows its **Store authorization** and **Ads authorization** (Expired, Revoked, Expiring), and **Issues** lists each problem with the button that fixes it.
2. Click **Reauthorize** on the store's row and sign in on Amazon's consent screen with the same seller account. For Amazon Ads, click **Ads** (or **Reauthorize Ads** in Issues). For noon, click **Recheck**, or **Reconnect** for an account you connected by signing in on noon; a noon account that isn't there yet needs **Add noon account**.
3. Only the organization's owner or an admin has these buttons. A member asks one of them.
4. Back in Google Sheets, close and reopen the sidebar (**Extensions → SellerSheet → Open Sidebar**) so it reads your stores again, then click your button again.
Most often from: any panel that talks to Amazon, Amazon Ads or noon. The fix is always in the app: [Stores & Marketplaces](/help/app/settings/stores).
## Plan limits, Credits or file size [#err-quota]
**What you see:** "Not enough credits: this needs …, you have …." · "Monthly sidebar operations limit reached (…). Any paid plan includes unlimited usage — upgrade at sellersheetai.com/billing." · "File size (… MB) exceeds the 10MB limit" · "Too many SKUs: … SKUs found. Maximum allowed is 20."
A limit stopped the button before it ran, so nothing was changed or charged. Either your Credits balance can't cover an AI action, the Free plan's sidebar operations for this month are used up, or the batch is bigger than the button takes.
1. **Credits:** top up on **Settings → Billing & Credits** in the SellerSheet app (owner or admin) — the message's **Buy credits →** opens billing. Then click the button again. A failed AI action costs nothing.
2. **Monthly sidebar operations:** upgrade the plan on Billing & Credits (owner only), or wait for the monthly reset. The sidebar's mini Dashboard shows your plan and usage.
3. **File size or too many SKUs:** send fewer rows at a time. **Validate (Preview)** and **Create/Replace/Del.** take up to 20 SKUs; **Submit Feed** takes up to 25,000 in a feed file of at most 10 MB.
Most often from: [Catalogs](/help/sheets/sellers/catalogs) (the Publish Queue), [Images](/help/sheets/sellers/images), [A+ Content](/help/sheets/sellers/a-plus), [noon Listings](/help/sheets/noon/listings) — every button marked USES CREDITS. See [Billing & Credits](/help/app/settings/billing).
## SellerSheet, Amazon or noon failed [#err-server]
**What you see:** "Create failed — see server logs." (or List, Edit, Delete, Archive… failed) · "SellerSheet server did not respond correctly (HTTP …). It may be busy or briefly unavailable — please try again in a minute." · "Failed to generate initial plan: …" · "Sync failed for every store (…) — the table below is unchanged."
The call to SellerSheet, Amazon or noon got no answer, or was refused. "— see server logs" means no answer came back to the sidebar. Those logs are SellerSheet's own: you can't open them, and you don't need to. When Amazon or noon refused, their reason follows the colon.
1. Wait a minute, then click the button again. A busy server or Amazon's rate limits often clear by then.
2. Before you repeat **Create**, **Edit**, **Delete** or **Archive**, click **List** with the same filters: the change may have reached Amazon even though the answer was lost. Repeat only what is missing.
3. If Amazon's or noon's reason follows the colon, fix what it names in the sheet and click again.
4. Still failing? [Contact support](/help/contact) with the exact message, the panel and button, and the time you clicked.
Most often from: [Sponsored Products](/help/sheets/ads/sp), [Sponsored Brands](/help/sheets/ads/sb), [Sponsored Display](/help/sheets/ads/sd), [FBA](/help/sheets/sellers/fba) (List Inbound Plans, Initiate Plan), [Catalogs](/help/sheets/sellers/catalogs) (Sync Catalog).
# SellerSheet docs (https://sellersheetai.com/docs)
> Turn your Amazon business into an AI-native company — your own AI, the SellerSheet MCP and tools, Amazon's official APIs.
**Your AI does the work. You step in only where it counts.** Give the AI you already use — Claude, ChatGPT, Cursor, Coze or any agent — the SellerSheet plugin: skills plus an MCP connection with more than tools over Amazon's official SP-API and Ads API, synced report tables, and a Google Sheets add-on with buttons. [Start free](https://sellersheetai.com/home).
## Three ways in [#three-ways-in]
Connect your AI client once. It reads Amazon, drafts changes and — once you trust it — acts. Most of the business runs here.
The same tools over HTTP, for dashboards and approval pages whose numbers stay live and whose buttons act on Amazon. Early access.
Change a hundred rows at once, keep the history, share it with the team; the sidebar runs the same operations by click.
## The docs [#the-docs]
* [Get started](/docs/start) — connect your store and your AI, run your first job.
* [AI & MCP](/docs/mcp-api) — keys and [store refs](/docs/mcp-api/store-refs) like , how calls work, the [tool reference](/docs/mcp-api/tools), the [skills](/docs/skills) your agents follow, and the [data tables](/docs/data) SellerSheet keeps in sync.
* [Help](/help) — the Google Sheets sidebar button by button, the web app, troubleshooting, and how to reach us.
* [Guides](/guides) — step-by-step jobs from the first prompt to the result on Amazon.
* [Blog](/blog) — launches, playbooks and walkthroughs.
## Try a prompt [#try-a-prompt]
Ask your AI in plain words — it picks the tools:
* "Build an FBA shipment from the box sizes in my sheet — packing, placement, confirm, labels."
* "From the last 30 days of search terms, find the converting ones I'm not targeting yet."
* "What do buyers praise and complain about most on this ASIN?"
More requests to copy are in the [prompt library](/docs/start/prompts).
## Machine-readable [#machine-readable]
* [/llms.txt](/llms.txt) — an index of every docs page; [/llms-full.txt](/llms-full.txt) — all of them in one file.
* [/api/v1/openapi.json](https://api.sellersheetai.com/api/v1/openapi.json) — the Tool API's OpenAPI description.
* [/\_data/mcp-tools.json](/_data/mcp-tools.json) — the tool catalog.
* Any docs page as Markdown: add `.md` to its URL.
# Read, write & destructive (https://sellersheetai.com/docs/mcp-api/access)
> Every tool carries one access label, served with the tool — and write access is granted per store, per API.
## The three labels [#the-three-labels]
| Label | Meaning | Examples |
| ------------------------------------ | --------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| | Reads only — changes nothing | `orders_searchOrders`, `query_report_data`, `fbaInbound_listPlacementOptions` |
| | Creates or changes something | `fbaInbound_createInboundPlan`, `generate_image`, `append_sheet_rows` |
| | Changes or removes something that cannot simply be undone | `listings_putListingsItem`, `fbaInbound_confirm_plan_options`, `ads_update_target_bid` |
The label is part of the tool, not of this page: the MCP server sends it with every tool (as the standard read-only and destructive hints your client understands), and the Tool API's catalog and OpenAPI carry it as `access`. The [tool reference](/docs/mcp-api/tools) shows each tool's label.
* **No tool both reads and writes.** A request to look can never change anything by accident.
* **Report and export requests are reads.** Asking Amazon to prepare a report, or creating a Data Kiosk query, changes nothing in your seller account.
* **A sheet, doc or Drive write is a write** — to your file, not to Amazon.
## Write access is per store, per API [#write-access-is-per-store-per-api]
A label says what a tool does; access says whether *you* may. A tool that changes your Amazon account checks, before it calls Amazon:
* **Seller API write** on that store for SP-API changes — feeds, listings, FBA plans and shipments, A+ publishing, vendor submissions.
* **Ads API write** on that store for advertising changes — campaigns, targets, bids, budgets.
* **noon write** on that noon account for changes to it.
Your key's access and, in a shared workspace, the access the owner or an admin gave you both apply — the lower one wins. Without it, the call is refused with 403 and nothing reaches Amazon. How to set it: [Keys & store access](/docs/mcp-api/keys), [Stay in control](/docs/mcp-api/control).
## Confirm before destructive [#confirm-before-destructive]
A destructive tool replaces a live listing, confirms a plan or changes a bid. Your agent shows you what will be sent and waits; your own code should do the same — a write happens because a person pressed a button.
# Call from code (https://sellersheetai.com/docs/mcp-api/code)
> Every tool your agent uses over MCP is also an HTTP operation — same name, same arguments, same result — for your own scripts, dashboards and approval pages.
What your agent calls in a conversation, your code calls by the same name with the same arguments. So your agent can build you your own tools on it — a live dashboard, a listing tool, an approval page — whose buttons act on Amazon exactly as the agent does in chat.
| | |
| ----------- | ---------------------------------------------------------------------------------------------------------- |
| Endpoint | `POST https://api.sellersheetai.com/api/v1/tools/{tool}` |
| Auth | `Authorization: Bearer ` — an API key, not an MCP key ([Keys & store access](/docs/mcp-api/keys)) |
| Body | the tool's arguments as a JSON object |
| Result | the same envelope the MCP tool returns ([Responses & errors](/docs/mcp-api/responses)) |
| Catalog | `GET https://api.sellersheetai.com/api/v1/tools` |
| OpenAPI 3.1 | `https://api.sellersheetai.com/api/v1/openapi.json` |
## One call [#one-call]
Start where an agent starts — `get_user_context` returns your store refs:
Then pass one of its `store_refs` verbatim as the `store` of every store-scoped tool:
Every tool is a `POST`: a tool is an operation with arguments, not a resource. Whether it reads, writes or destroys is its access label in the catalog (see [Read, write & destructive](/docs/mcp-api/access)).
## Keep the key out of your code [#keep-the-key-out-of-your-code]
Save it once as `SELLERSHEET_API_KEY` — in your shell, or a `.env` file next to your script that is listed in `.gitignore` — and read it from there, as the snippets above do. A browser page has no `.env`: ask for the key when the page opens and keep it in `sessionStorage` under the same name — never in the HTML, never in a page you share.
## What to know before you build [#what-to-know-before-you-build]
* **The status code tells you whether it ran.** 200 means the call was carried out; a 4xx means it was not; 503 means Amazon, noon or the backend could not answer — retry after `Retry-After`. Details: [Responses & errors](/docs/mcp-api/responses).
* **Paging is your loop.** A list tool returns a token for the next page; call again with it. See [Paging](/docs/mcp-api/paging).
* **Show before you write.** A write should happen because a person pressed a button: show what will be sent first, and confirm explicitly before a destructive tool.
* **Long calls belong on MCP.** The public edge cuts an HTTP call still running after about 100 seconds. A long workflow — a whole FBA plan, a large A+ library — runs over MCP, whose streamed response is not cut.
* **Same limits as MCP.** API calls count under the same plan windows as your agent's calls; a 429 carries `Retry-After`. See [Credits & limits](/help/app/settings/billing).
* **Browser pages are allowed.** The API accepts calls from any origin with the `Authorization` and `Content-Type` headers and no cookies. A page hosted inside an AI client may be blocked from calling other hosts — run it as a local file, on localhost, or on your own host.
Every tool, with its arguments and a ready call: the [tool reference](/docs/mcp-api/tools).
# Stay in control (https://sellersheetai.com/docs/mcp-api/control)
> Your agent works for you. Labels on every tool, write access per store, approval in your client and trust you widen step by step keep it that way.
## Every tool says what it does [#every-tool-says-what-it-does]
Each tool carries one label, and your AI client reads the same label:
| Label | Meaning |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- |
| | Reads only — changes nothing. |
| | Creates or changes something. |
| | Changes or removes something that cannot simply be undone — a live listing, a confirmed shipment plan, a bid. |
No tool both reads and writes, so a "look" request can never change anything by accident. The full rules: [Read, write & destructive](/docs/mcp-api/access).
## Turn on tool approval [#turn-on-tool-approval]
Most clients can ask before every tool call. Keep it on for anything that writes. Many let you allow read-only tools once and keep asking for the rest — a good place to start.
## Write access is per store [#write-access-is-per-store]
Reading always works on a store you can see. Changing it needs write access **on that store**, or the call is refused with 403 before anything reaches Amazon:
* **Your keys** carry Seller API and Ads API access per store — none, read, or read and write ([Keys & store access](/docs/mcp-api/keys)).
* **Your team**: the owner or an admin of the workspace sets each member's Seller API and Ads API access per store, and one level per noon account, under **Settings → Members**.
* A key never reaches beyond what its holder can reach, so a read-only member's key is read-only too.
Report and export *requests* — asking Amazon to prepare a report — are reads: they change nothing in your account.
## Trust grows over time [#trust-grows-over-time]
Start by approving everything. Ask your agent to write what it intends into a Google Sheet first — the bids it would change, the listings it would submit — and approve there; the sheet is also your team's record. Once a kind of work has gone right many times, let it run on its own: low-risk reads and reports first, changes later. Your agent never picks an option for you — a placement, a transport offer — unless you give it the rule.
## Revoke any time [#revoke-any-time]
* **An AI client or a key:** **Settings → API & MCP** lists every key, including the one each browser sign-in created. Turn it off or delete it and it stops working at once.
* **SellerSheet's access to Amazon:** Seller Central → Manage Your Apps. Your stores then stop syncing and refuse calls until you reauthorize.
See also: [Data we never see](/docs/start/privacy) · [Troubleshooting](/help/troubleshooting/ai).
# One set of endpoints (https://sellersheetai.com/docs/mcp-api)
> The same tools, with the same arguments and the same results, for your AI over MCP, for your code over the Tool API, and behind the Google Sheets add-on.
SellerSheet has one set of tools — more than of them. They reach you three ways, each with its own job:
1. **An MCP tool** your AI calls in a conversation — through `https://sellersheetai.com/mcp`. This is where the work happens: your agent reads, decides, asks you, and acts. [Connect an AI client](/docs/start/clients).
2. **A Tool API operation** your own code calls — `POST https://api.sellersheetai.com/api/v1/tools/{tool}`. A dashboard or approval page your agent builds on it is live: its numbers update and its buttons act on Amazon. Early access — [Call from code](/docs/mcp-api/code).
3. **The engine behind the Google Sheets add-on**, where your team does bulk edits and keeps the record. See the [add-on docs](/help/sheets).
Over MCP and the Tool API a tool keeps its name, its arguments and its result, so a call your agent made in chat, your code can make tomorrow (the add-on drives the same operations from your sheet rows):
## What every call shares [#what-every-call-shares]
* **One store argument.** Store-scoped tools take `store`, a ref such as from `get_user_context` — [Store refs](/docs/mcp-api/store-refs).
* **One result shape.** `notification`, `data`, `human_action` — [Responses & errors](/docs/mcp-api/responses).
* **One way to page.** A token in, a token out; your agent or your loop calls again — [Paging](/docs/mcp-api/paging).
* **One label per tool.** Read, write or destructive, and write access per store — [Read, write & destructive](/docs/mcp-api/access).
* **The vendor's own names.** A tool that wraps one Amazon operation carries Amazon's name, such as `orders_getOrder` or `fbaInbound_listPlacementOptions`; a SellerSheet workflow over several operations keeps the API area's prefix with a lower-case tail, such as `fbaInbound_create_sta_sheet`.
* **The schema says the rules.** Allowed values, bounds and formats from Amazon's specification are in each tool's input schema, so a wrong value is refused before anything reaches Amazon.
## Where to go next [#where-to-go-next]
* [Workflows](/docs/mcp-api/workflows) — one page per job, FBA first.
* [Tool reference](/docs/mcp-api/tools) — every tool, its arguments and a ready call.
# Keys & store access (https://sellersheetai.com/docs/mcp-api/keys)
> Sign in with OAuth where you can, use a key where you must — and decide exactly which stores and which actions each key may touch.
Most AI clients sign in in the browser and never show you a key. A key is for clients that can't open a browser (Coze, servers, headless agents) and for your own code.
## Two kinds of key [#two-kinds-of-key]
| Kind | For | Where it works |
| ----------- | ----------------------------------------------------------------------------- | ------------------------------------ |
| **MCP key** | AI clients — Claude, Cursor, ChatGPT, Coze and others | `https://sellersheetai.com/mcp` only |
| **API key** | Your own scripts and pages — the [Tool API](/docs/mcp-api/code), early access | the Tool API only |
An MCP key is refused by the Tool API, and an API key is refused by the MCP server, both with 401. Each browser sign-in creates an MCP key for that client, so it shows in the same list.
## Create a key [#create-a-key]
### Open the key list [#open-the-key-list]
In the app: **Settings → API & MCP → Create key**.
### Name it after where it will live [#name-it-after-where-it-will-live]
"Claude on my laptop", "VA agency", "reporting server". When a laptop is lost or a key leaks, the name tells you which one to turn off.
### Choose its reach [#choose-its-reach]
**All my workspaces** reaches every store you reach in every workspace you belong to, stores shared with you included. **⟨workspace⟩ only** reaches that workspace's stores. Reach is fixed when the key is created — create a new key to change it.
### Choose its stores and access [#choose-its-stores-and-access]
**Open** — every store the key reaches. **Restricted** — only the stores and marketplaces you list. For each, set **Seller API** and **Ads API** access: none, read, or read and write. A read key can analyse everything but cannot submit a feed, create a shipment or change a bid — useful as the everyday key, with a second write key you use on purpose.
### Copy it and connect [#copy-it-and-connect]
Copy the token right away and keep it like a password — anyone holding it acts as you. **Snippets** on the key's row prints a ready-made configuration for each AI client with the key filled in. **Last used** tells you whether a key is still in use; turn a key off or delete it from the same list and every client using it stops at once.
Your plan sets how many keys of each kind you can have. A key never reaches beyond what you can reach yourself, and on a store shared with you it gets at most what the owner granted you.
## How your agent knows its own limits [#how-your-agent-knows-its-own-limits]
Every session starts with `get_user_context`. Its answer tells the agent which stores it can reach, with their `store_refs`, and what it may do on each — so it can tell you **before** it tries a change that would be refused.
## Keep keys out of sight [#keep-keys-out-of-sight]
* Keep a key in an environment variable (`SELLERSHEET_API_KEY`) or a `.env` file listed in `.gitignore` — never in code, a shared document or a command line.
* An agent that was handed a key in chat may write it to `.env` for you; it must not echo it back or commit it.
* Suspect a leak? Turn the key off in **Settings → API & MCP** and create a new one.
Related: [Store refs](/docs/mcp-api/store-refs) · [Stay in control](/docs/mcp-api/control) · [Troubleshooting](/help/troubleshooting/ai).
# Paging (https://sellersheetai.com/docs/mcp-api/paging)
> A list tool returns one page and a token for the next. Calling again is your agent's step — or your loop's.
Amazon answers long lists one page at a time, and so does every SellerSheet tool that wraps such a list. A result never tells your agent to "call again" — the tool's description says how it pages, and the agent decides whether it needs the next page.
## How it works [#how-it-works]
1. Call the tool without a token — you get the first page and, when there is more, a token in `data` (Amazon's own name for it, such as `nextToken`).
2. Call the same tool with the same arguments plus that token — you get the next page.
3. No token in the result means you have the last page.
The argument that takes the token is named in each tool's reference — usually `pagination_token` or `next_token`, sometimes the vendor's own spelling. Most list tools also take a page size, such as `page_size`.
## Good habits [#good-habits]
* **Pass `null`, not an empty string, for "no token".** Every optional argument accepts an explicit `null`, so your agent can start with `pagination_token: null`.
* **Keep the other arguments the same** between pages; a token belongs to its query.
* **Ask the warehouse for history.** "Every order last quarter" is one `query_report_data` call over the synced tables, with `limit` and `offset`, not hundreds of pages from Amazon — and it spends none of Amazon's rate limits. See [Synced reports](/docs/mcp-api/workflows/reports).
* **Write as you go.** For a whole catalog into a sheet, your agent appends each page to the sheet before fetching the next, so a long run never holds everything at once.
# Responses & errors (https://sellersheetai.com/docs/mcp-api/responses)
> Every tool answers with the same envelope, and the HTTP status says whether the call was carried out.
## The envelope [#the-envelope]
Every tool — over MCP and over the Tool API — returns the same three fields:
```json
{
"notification": { "message": "Found 12 unshipped orders.", "type": "success" },
"data": { "...": "the tool's result" },
"human_action": ""
}
```
| Field | What it is | What your agent does |
| ---------------------- | ------------------------------------------------------------------------------ | -------------------- |
| `notification.message` | One sentence saying what happened | Tells you |
| `notification.type` | `success`, `info`, `warning` or `error` | Weighs the result |
| `data` | The result itself — its fields are in each tool's output schema | Works with it |
| `human_action` | Something only you can do — reauthorize a store, top up Credits. Usually empty | Passes it on to you |
What to call next is in each tool's description, never in the result.
## The status says whether it was carried out [#the-status-says-whether-it-was-carried-out]
* **200 — the call was carried out.** `notification.type` says how it ended. A call that ran and ended badly — a feed Amazon rejected, a job that failed — is still 200, with the detail in `data`.
* **4xx — the call was not carried out.** Nothing changed. A refused call is never a 200 with `type: "error"`.
* **503 — nobody could answer.** Amazon, noon or SellerSheet's backend could not answer just then; retry after `Retry-After`. The Tool API never answers 502: the public edge would replace its body with its own page.
| Status | Meaning | What to do |
| ------ | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| 200 | Carried out — read `data` | — |
| 400 | Bad input or a missing precondition; Amazon's own refusal comes back as 400 with Amazon's list in `errors` | Fix the arguments; don't retry as is |
| 401 | Your SellerSheet sign-in or key is missing, invalid, turned off or the wrong kind — never an Amazon or noon problem | Sign in again or use the right key ([Keys](/docs/mcp-api/keys)) |
| 402 | Not enough Credits | Top up — nothing was charged ([Credits](/help/app/settings/billing)) |
| 403 | Signed in, but not allowed: the store, the marketplace, write access, a paused store | Read the sentence; it names the fix ([Stay in control](/docs/mcp-api/control)) |
| 404 | No such tool (Tool API) — a renamed tool says its new name | Look it up in the catalog |
| 429 | A plan window or Amazon's quota is full | Wait `Retry-After` seconds |
| 503 | Amazon, noon or the backend could not answer | Retry after `Retry-After` |
## A refusal [#a-refusal]
Every refusal, on every tool — the sheet, doc and Drive tools included — has the same body:
```json
{
"notification": { "message": "…the sentence your agent reads to you…", "type": "error" },
"error_code": "rate_limit_exceeded",
"errors": null,
"human_action": ""
}
```
* `notification.message` — the sentence; it names the fix.
* `error_code` — a stable identifier your code can branch on, such as `rate_limit_exceeded`, `quota_exceeded` or `insufficient_credits`.
* `errors` — Amazon's own list of problems when Amazon refused, otherwise null. Keep it next to the sentence; never flatten it into a string.
* `retry_after` and the `Retry-After` header — seconds to wait, on 429 and 503.
Each Tool API response also carries `X-Request-Id`; quote it when you write to support.
All the fixes, by symptom: [Troubleshooting](/help/troubleshooting/ai).
# Store refs (https://sellersheetai.com/docs/mcp-api/store-refs)
> Every store-scoped call names its store as - — the store and the marketplace in one string, taken verbatim from get_user_context.
A store ref is the store's name, a dash and the marketplace's country code: , `myStore-DE`, . noon accounts use the same shape, such as `myNoon-AE`. It is the `store` argument of every store-scoped tool — over MCP, over the Tool API and in the sidebar alike.
## Take refs from get_user_context — never build one [#take-refs-from-get_user_context--never-build-one]
`get_user_context` returns a ready-made `store_refs` list for each store. Your agent passes one **verbatim**. It never glues a name to a country code itself, and never guesses a marketplace: picking one by hand is how a call lands on a marketplace your plan doesn't cover.
No Amazon seller (SP-API) tool takes a separate country code — the ref already names the marketplace. The Amazon Ads tools are the exception: they also take a `countryCode` for the advertising profile.
## A bare name is refused — with the answer [#a-bare-name-is-refused--with-the-answer]
A bare store name (`myStore`) names the store but not the marketplace, so it is refused with a 400. The refusal lists **every ref that would have worked**, so your agent corrects itself in one step:
For a store selling in the US, Canada and Mexico, that is `myStore-US`, `myStore-CA` and `myStore-MX`.
A ref that matches two of your stores is refused too, the same way — rename one of them in the app.
## Paused stores [#paused-stores]
A store whose **every** marketplace is inactive on your plan stops syncing, so its report data would be out of date. Rather than answer from stale data, SellerSheet **refuses** the store (403), naming it, your plan's usage and both remedies:
* upgrade the plan, or
* free a marketplace slot under **My Stores → Edit Marketplaces** — in the app, **Settings → Stores & Marketplaces → Edit markets**.
`get_user_context` marks such a store `paused` with the reason, so your agent knows before it picks a store. A store with only **some** marketplaces active is not paused: it keeps syncing those and answers for them.
noon marketplaces count against the same plan quota as Amazon ones, so a noon account can be the reason an Amazon marketplace is not active.
## Stores shared with you [#stores-shared-with-you]
A store another account shares with you appears in your `store_refs` like your own. What you can do on it is what its owner granted you — and a key never reaches beyond that. See [Stay in control](/docs/mcp-api/control).
# Advertising account (https://sellersheetai.com/docs/mcp-api/workflows/ads-account)
> Ads accounts and profiles, manager accounts, invoices, brands, Stores insights, budget rules and event streams — by conversation or by code.
Everything around your campaigns: which Ads accounts and profiles you have, what Amazon billed you, which brands and Stores assets you own, budget rules and usage, and real-time event streams.
## In your daily workflow [#in-your-daily-workflow]
* **Accounts and profiles** — `ads_list_ads_accounts` and `ads_get_ads_account` show what your connection reaches; `ads_get_manager_accounts` covers manager accounts.
* **Invoices** — `ads_list_invoices` and `ads_get_invoice` answer "what did Amazon bill us, and is it paid?"
* **Budgets** — `ads_campaigns_budget_usage` and `ads_portfolio_budget_usage` show how much of each budget is spent; the budget-rule tools raise budgets on a schedule or on performance.
* **Brands and Stores** — `ads_get_brands`, `ads_list_assets`, `ads_get_asin_engagement_for_store` and `ads_get_insights_for_store_api`.
* **Localization** — `ads_get_localized_keywords`, `ads_get_localized_products` and their siblings translate keywords and products for another marketplace.
* **Event streams** — `ads_list_stream_subscriptions` and `ads_create_stream_subscription` manage real-time Ads event subscriptions.
## Try asking [#try-asking]
> "List my Amazon Ads accounts and profiles."
> "Show me my unpaid advertising invoices."
> "Which campaigns ran out of budget this week?"
## Accounts, both ways [#accounts-both-ways]
**MCP** — you ask: "Which Ads accounts can you see?" Your agent calls `ads_list_ads_accounts`.
Creating accounts, associating manager accounts, budget rules and stream subscriptions change your Ads account, so the store needs Ads write access (see [Stay in control](/docs/mcp-api/control)). Everything else here reads.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### My agent sees no Ads profile. [#my-agent-sees-no-ads-profile]
Advertising is a separate authorization on Amazon. Authorize Ads for the store — see [Connect your store](/docs/start/connect).
### Where are the campaigns? [#where-are-the-campaigns]
See [Sponsored Products](/docs/mcp-api/workflows/ads-sp).
# Ad reports (https://sellersheetai.com/docs/mcp-api/workflows/ads-reports)
> Performance for every ad type — from your synced ad reports instantly, or a fresh report from Amazon when you need one — plus brand metrics.
Most ad questions are answered from your synced Sponsored Products, Brands and Display reports in seconds. When you need a report shape that is not synced, your agent requests it from Amazon, waits for it and reads the rows.
## Two ways to get the numbers [#two-ways-to-get-the-numbers]
### Ask your synced reports first [#ask-your-synced-reports-first]
Campaign, ad group, keyword, target, search-term and placement reports sync on a schedule. `query_report_data` filters and totals them instantly — "SP campaigns with ACoS above 40% last month" never waits on Amazon. The tables are listed on the [Data](/docs/data) tab.
### Request a fresh report when you need one [#request-a-fresh-report-when-you-need-one]
`ads_create_async_report` asks Amazon for a report with the columns, grouping and dates you choose. Amazon builds it in the background; `ads_get_async_report` checks the status and returns the rows when it is complete.
### Brand metrics [#brand-metrics]
`ads_generate_brand_metrics_report` and `ads_get_brand_metrics_report` return brand awareness and consideration KPIs — also built in the background.
## Try asking [#try-asking]
> "Generate a Sponsored Products campaign performance report for last month."
> "From the last 30 days of search terms, find the converting ones I'm not targeting yet."
> "Show me my brand metrics report."
## A fresh report, both ways [#a-fresh-report-both-ways]
**MCP** — you ask: "Get last month's Sponsored Products campaign report." Your agent calls `ads_create_async_report`, then polls `ads_get_async_report` until it is done.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### Synced or fresh? [#synced-or-fresh]
Synced for anything over a date range — it is instant and does not use Amazon's rate limits. Fresh when the shape you need is not synced. See [Synced reports](/docs/mcp-api/workflows/reports).
### How far back can a fresh report go? [#how-far-back-can-a-fresh-report-go]
Most Ads report types look back at most 95 days.
### Is there a skill for this? [#is-there-a-skill-for-this]
Yes — the `amazon-ads` skill carries ready-made report request bodies. See [Install the skills](/docs/start/skills).
# Sponsored Brands (https://sellersheetai.com/docs/mcp-api/workflows/ads-sb)
> Headline search ads that show your brand — campaigns, ad groups, creatives, keywords and bids — by conversation or by code.
Sponsored Brands campaigns use the same campaign, ad group, ad and target tools as every other ad type, filtered to Sponsored Brands. Your agent asks Amazon for keyword and bid suggestions before it proposes anything.
## In your daily workflow [#in-your-daily-workflow]
* **Start from your brand** — `ads_get_brands` lists the brands registered under your Ads profile; `ads_list_assets` finds the logos and images your creatives can use.
* **Pick keywords** — `ads_get_keyword_recommendations` suggests keywords for a Sponsored Brands campaign; `ads_get_bids_recommendations` returns Amazon's suggested bids.
* **Build it** — `ads_create_campaign`, `ads_create_ad_group`, `ads_create_ad` and `ads_create_target` create the entities; `ads_query_campaign` lists what is live.
* **Budget** — `ads_sb_get_budget_recommendations` tells you where a campaign is losing impressions to budget.
* **Performance** — your synced Sponsored Brands reports answer through `query_report_data`.
## Try asking [#try-asking]
> "Create a Sponsored Brands campaign for my brand with the three best keywords Amazon suggests — show me the plan first."
> "Get bid recommendations for my Sponsored Brands keywords."
## Listing campaigns, both ways [#listing-campaigns-both-ways]
**MCP** — you ask: "List my Sponsored Brands campaigns." Your agent calls `ads_query_campaign`.
Creating and changing campaigns, ads and targets changes your Ads account, so the store needs Ads write access (see [Stay in control](/docs/mcp-api/control)). Recommendations and reads work with read access.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### Why are the campaign tools the same as Sponsored Products? [#why-are-the-campaign-tools-the-same-as-sponsored-products]
Amazon's current Ads API treats campaigns, ad groups, ads and targets the same way for every ad type; you choose the ad type in the request. See [Sponsored Products](/docs/mcp-api/workflows/ads-sp).
### Where are the reports? [#where-are-the-reports]
See [Ad reports](/docs/mcp-api/workflows/ads-reports) and [Synced reports](/docs/mcp-api/workflows/reports).
# Sponsored Display (https://sellersheetai.com/docs/mcp-api/workflows/ads-sd)
> Reach shoppers on and off Amazon — display campaigns, audiences and product targeting, with Amazon's bid and budget suggestions — by conversation or by code.
Sponsored Display uses the shared campaign, ad group, ad and target tools, plus three Sponsored Display suggestions from Amazon: products and categories to target, bids, and budgets.
## In your daily workflow [#in-your-daily-workflow]
* **Find who to target** — `ads_get_target_recommendations` suggests products and categories to target for the ASINs you advertise.
* **Bid with Amazon's numbers** — `ads_get_target_bid_recommendations` returns suggested bids for those targets.
* **Spot missed reach** — `ads_get_sd_budget_recommendations` returns budget suggestions and the missed-opportunity metrics behind them.
* **Build and change** — `ads_create_campaign`, `ads_create_ad_group`, `ads_create_ad` and `ads_create_target`; `ads_update_target_bid` changes a bid you approved.
* **Performance** — your synced Sponsored Display reports answer through `query_report_data`.
## Try asking [#try-asking]
> "Create a Sponsored Display retargeting campaign for B0EXAMPLE1 — suggest the targets and bids first."
> "What are the recommended budgets for my Sponsored Display campaigns?"
## Budget suggestions, both ways [#budget-suggestions-both-ways]
**MCP** — you ask: "What budgets does Amazon recommend for these Sponsored Display campaigns?" Your agent calls `ads_get_sd_budget_recommendations` and lays the suggestions next to today's budgets.
Creating and changing campaigns, targets and bids changes your Ads account, so the store needs Ads write access (see [Stay in control](/docs/mcp-api/control)). Recommendations and reads work with read access.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### Do the campaign tools differ from Sponsored Products? [#do-the-campaign-tools-differ-from-sponsored-products]
No — the same tools serve every ad type. See [Sponsored Products](/docs/mcp-api/workflows/ads-sp) and [Sponsored Brands](/docs/mcp-api/workflows/ads-sb).
### Where are the reports? [#where-are-the-reports]
See [Ad reports](/docs/mcp-api/workflows/ads-reports).
# Sponsored Products (https://sellersheetai.com/docs/mcp-api/workflows/ads-sp)
> Launch, tune and audit Sponsored Products campaigns — campaigns, ad groups, keywords, product targets, bids, negatives and Amazon's own recommendations — by conversation or by code.
Describe the campaign you want; your agent builds the whole structure, asks Amazon for the suggested bid, and shows you the plan before anything goes live. Day to day it reads performance from your synced ad reports and changes only the bids and targets you approve.
## Launch a campaign, step by step [#launch-a-campaign-step-by-step]
### Describe it in one sentence [#describe-it-in-one-sentence]
"Create a Sponsored Products campaign for B0EXAMPLE1 with a daily budget I set, targeting 'organic protein powder'." Your agent plans the campaign, an ad group, the product ad and the keyword, and shows you the structure first.
### Ask Amazon what to bid [#ask-amazon-what-to-bid]
`ads_get_theme_based_bid_recommendation_for_ad_group_v1` returns Amazon's suggested bids for the keywords and targets; `ads_get_ranked_keyword_recommendation` suggests more keywords worth adding.
### Create it in one request [#create-it-in-one-request]
`ads_sp_bulk_create` creates the campaign, ad groups, keywords and product ads in one atomic request — much faster than one entity at a time. Single entities go through `ads_create_campaign`, `ads_create_ad_group`, `ads_create_ad` and `ads_create_target`.
### Tune it every week [#tune-it-every-week]
`query_report_data` reads campaign, keyword and search-term performance from your synced SP reports. Your agent writes the proposed bid changes to your sheet; on your go-ahead `ads_update_target_bid` applies them. Negative keywords and targets cut wasted spend; `ads_get_history` shows the last 90 days of changes.
## In your daily workflow [#in-your-daily-workflow]
* **Amazon's own tips** — `ads_list_recommendations` lists Amazon's optimization suggestions; `ads_apply_recommendations` applies the ones you accept.
* **Rules instead of manual edits** — `ads_sp_create_optimization_rules` and `ads_associate_optimization_rules_to_campaign` set schedule-based bid rules.
* **Portfolios** — `ads_list_portfolios`, `ads_create_portfolio` and `ads_update_portfolio` group campaigns under a shared budget.
* **Full snapshots** — `ads_campaign_export` and its siblings export every entity; `ads_get_export` downloads the file.
## Try asking [#try-asking]
> "Create a Sponsored Products campaign for B0EXAMPLE1 targeting 'organic protein powder', with Amazon's suggested bid — show me the structure before you create it."
> "Raise the bids on these keywords 10% toward the suggested bid — write them to the sheet first, I'll confirm before you submit."
## Listing campaigns, both ways [#listing-campaigns-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "List my Sponsored Products campaigns." Your agent calls `ads_query_campaign` and pages through the results.
Creating campaigns, changing bids, budgets and targets, and applying recommendations change your Ads account, so the store needs Ads write access (see [Stay in control](/docs/mcp-api/control)). Reading campaigns, recommendations and reports works with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
Campaigns, ad groups, ads and targets for every ad type:
Sponsored Products recommendations, portfolios, rules and exports:
## FAQ [#faq]
### Where does performance data come from? [#where-does-performance-data-come-from]
From your synced ad reports — `query_report_data` answers instantly without waiting on Amazon. See [Synced reports](/docs/mcp-api/workflows/reports) and [Ad reports](/docs/mcp-api/workflows/ads-reports).
### Will my agent change bids on its own? [#will-my-agent-change-bids-on-its-own]
Not unless you tell it to. The usual pattern is: write the proposal to the sheet, you review, then it submits.
### What about budgets? [#what-about-budgets]
`ads_campaigns_budget_usage` shows which campaigns ran out this week; budget rules are on [Advertising account](/docs/mcp-api/workflows/ads-account) and the other ad types on [Sponsored Brands](/docs/mcp-api/workflows/ads-sb) and [Sponsored Display](/docs/mcp-api/workflows/ads-sd).
### Is there a skill for this? [#is-there-a-skill-for-this]
Yes — the `amazon-ads` skill. See [Install the skills](/docs/start/skills).
# A+ Content (https://sellersheetai.com/docs/mcp-api/workflows/aplus)
> Check, create, iterate and publish A+ content — and manage which ASINs it is live on — without opening Seller Central.
Your agent checks whether an ASIN already has A+, builds and submits a whole module set in one call, edits drafts, relinks variation families and takes content down without deleting it.
## In your daily workflow [#in-your-daily-workflow]
### Before writing anything [#before-writing-anything]
"Does this ASIN already have A+?" `aplusContent_searchContentPublishRecords` answers per ASIN, so you never draft content that would fight a live document.
### Launch day [#launch-day]
`aplusContent_create_and_publish` is the one-call pipeline: it uploads your images, creates the document, links the ASINs and submits it for Amazon's review.
### Iterate on a draft [#iterate-on-a-draft]
`aplusContent_updateContentDocument` edits copy and modules while the document is still a draft; `aplusContent_postContentDocumentApprovalSubmission` sends it for review when you are happy.
### Manage a variation family [#manage-a-variation-family]
New variation added? `aplusContent_validateContentDocumentAsinRelations` checks the ASINs first, then `aplusContent_postContentDocumentAsinRelations` replaces the linked set.
### Review the portfolio, take content down [#review-the-portfolio-take-content-down]
`aplusContent_list_documents_detailed` pulls your documents with full detail, so your agent can lay out coverage brand-wide in a sheet. `aplusContent_postContentDocumentSuspendSubmission` unpublishes a document and keeps it for later.
## Try asking [#try-asking]
> "Check if B0EXAMPLE1 already has live A+ content, then create and publish A+ for it using the images in my Images Generation sheet."
> "Create the A+ page from the content in my sheet and submit it."
## Step 1, both ways [#step-1-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "Does B0EXAMPLE1 have A+ yet?" Your agent calls `aplusContent_searchContentPublishRecords` and tells you what is live.
Creating, editing, submitting, linking and suspending change your seller account, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Searching and reading documents works with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Where do the A+ images come from? [#where-do-the-a-images-come-from]
From your own files, or from images your agent generates — see [AI images](/docs/mcp-api/workflows/images). Generated images are paid from Credits.
### What should the copy say? [#what-should-the-copy-say]
Ask your agent to start from what buyers say — see [Review insights](/docs/mcp-api/workflows/reviews).
# Data Kiosk (https://sellersheetai.com/docs/mcp-api/workflows/datakiosk)
> Run Amazon Data Kiosk GraphQL queries — Sales & Traffic, Economics, Vendor Analytics — and read the results, by conversation or by code.
Data Kiosk is Amazon's GraphQL analytics API. Your agent writes the query, submits it, waits for Amazon and reads the document — sales and traffic by date or ASIN, per-unit fees and margin, vendor analytics.
## Query, wait, read [#query-wait-read]
### Submit the query [#submit-the-query]
`dataKiosk_createQuery` sends a GraphQL query for one dataset and date range.
### Wait for Amazon [#wait-for-amazon]
`dataKiosk_getQuery` checks the status and downloads the result when it is done. `dataKiosk_getQueries` lists your recent queries; `dataKiosk_cancelQuery` stops one.
### Read the document [#read-the-document]
`dataKiosk_getDocument` fetches a finished result by its document ID.
## Try asking [#try-asking]
> "Run a Data Kiosk Sales & Traffic query by ASIN for last month."
> "Check my pending Data Kiosk queries."
## Checking a query, both ways [#checking-a-query-both-ways]
**MCP** — you ask: "Is my Data Kiosk query done yet?" Your agent calls `dataKiosk_getQuery`.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### Is Sales & Traffic already synced? [#is-sales--traffic-already-synced]
Yes — by date and by ASIN, as synced tables you query instantly. See [Synced reports](/docs/mcp-api/workflows/reports) and the [Data](/docs/data) tab.
### How does my agent write a valid query? [#how-does-my-agent-write-a-valid-query]
The `data-kiosk` skill carries each dataset's fields, arguments and enums. See [Install the skills](/docs/start/skills).
# Google Docs (https://sellersheetai.com/docs/mcp-api/workflows/docs)
> Create and edit Google Docs — reports, SOPs, briefs — in your SellerSheet workspace.
`write_doc_structured` writes a whole document in one call — headings, paragraphs, lists, tables. The other Docs tools give your agent fine control over text, tables, images, headers, footers and styles.
## In your daily workflow [#in-your-daily-workflow]
### Create the document [#create-the-document]
`create_doc_in_folder` creates a doc inside your workspace folder; `get_doc` and `get_doc_text` read one back.
### Write it in one call [#write-it-in-one-call]
`write_doc_structured` takes a list of blocks and writes them in order — the fastest way to turn a week's numbers into a report.
### Edit precisely [#edit-precisely]
`find_doc_text`, `replace_doc_text`, `insert_doc_text` and `delete_doc_range` change text; `insert_doc_table`, `set_doc_table_cell_text` and `insert_doc_image` add tables and images; `update_doc_text_style` and `update_doc_paragraph_style` style it. `doc_batch_update` is the escape hatch.
## Try asking [#try-asking]
> "Create a weekly performance report doc in my reports folder."
> "Insert a 3-column table summarising my top ASINs."
## Writing a document, both ways [#writing-a-document-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask for the weekly report. Your agent pulls the numbers, then calls `write_doc_structured`.
The write tools change the document you name — never your Amazon account. A document must be yours: owned by you, shared with your Google account, or inside your workspace.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Where do the numbers come from? [#where-do-the-numbers-come-from]
From the Amazon tools and your synced reports — for example [Sales analytics](/docs/mcp-api/workflows/sales) and [Synced reports](/docs/mcp-api/workflows/reports).
# Google Drive (https://sellersheetai.com/docs/mcp-api/workflows/drive)
> Find, save, copy, share and organise files in your SellerSheet workspace on Google Drive.
Your agent works inside your SellerSheet workspace folders: it lists and searches files there, saves files from a link, creates spreadsheets, and shares or moves what you ask. A listing never leaves your workspace, and a file named by its id must be yours.
## In your daily workflow [#in-your-daily-workflow]
### Find it [#find-it]
`list_drive_files` lists a folder of your workspace; `search_drive_files` and `find_file_in_folder` find files by name; `get_drive_file` returns one file's details.
### Save and create [#save-and-create]
`save_url_to_drive` streams a file from a link into a folder — a report document, a label PDF; `start_drive_upload` opens an upload for large files. `find_or_create_folder` and `create_spreadsheet_in_folder` set up a place for new work.
### Organise and share [#organise-and-share]
`copy_drive_file`, `move_file_to_folder` and `rename_drive_file` keep things tidy; `share_drive_file`, `unshare_drive_file` and `list_drive_permissions` manage who can see a file.
## Try asking [#try-asking]
> "List all files in my reports folder."
> "Share my sales spreadsheet with my team, view only."
## Listing a folder, both ways [#listing-a-folder-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "What's in my reports folder?" Your agent calls `list_drive_files`.
Saving, moving, sharing and deleting change files in your Drive — never your Amazon account. Deleting a file and removing someone's access cannot simply be undone.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Where is my workspace folder? [#where-is-my-workspace-folder]
The Google Sheets add-on creates it the first time you open the sidebar. See [Connect your store](/docs/start/connect).
### Are generated images in Drive? [#are-generated-images-in-drive]
No — generated images live on SellerSheet's CDN and in your Image Library. See [AI images](/docs/mcp-api/workflows/images).
# Check FBA stock & restock (https://sellersheetai.com/docs/mcp-api/workflows/fba-inventory)
> Check Amazon's live stock before you act, and run restock, aging and stranded-inventory analysis over your synced inventory reports.
Spot-check live, analyse synced. A live call gives Amazon's numbers right now for a few SKUs; the synced inventory reports answer whole-catalog questions — restock, aging, stranded stock — instantly.
## In your daily workflow [#in-your-daily-workflow]
### Before you create a shipment [#before-you-create-a-shipment]
`fbaInventory_getInventorySummaries` returns Amazon's live numbers for the SKUs you are about to send: fulfillable, inbound, reserved and unsellable. Use it when the decision depends on *right now*.
### Restock day [#restock-day]
"Which SKUs run out within 3 weeks?" is an analysis over your synced FBA reports — inventory ledger, restock recommendations, aging — through `query_report_data`. It covers every SKU at once and joins with your sales velocity. See the [synced tables](/docs/data).
### Stranded and aging audit [#stranded-and-aging-audit]
The synced stranded-inventory and aging tables show cash quietly stuck in fulfillment centers. Ask for them once a month.
## Try asking [#try-asking]
> "Check live FBA stock for SKU-A and SKU-B in myStore-US."
> "Which of my SKUs will run out of FBA stock within 21 days at current sales velocity?"
## The spot check, both ways [#the-spot-check-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "How many units of SKU-A are fulfillable and inbound right now?" Your agent calls `fbaInventory_getInventorySummaries` for that SKU and reads the counts back to you.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Live or synced — which should I use? [#live-or-synced--which-should-i-use]
Live is per SKU and counts against Amazon's rate limits; synced covers the whole catalog and answers at once. Spot-check live, analyse synced.
### Ready to send stock? [#ready-to-send-stock]
Continue with [Create FBA shipments](/docs/mcp-api/workflows/fba-shipments).
### Can I ship FBA stock to a non-Amazon order? [#can-i-ship-fba-stock-to-a-non-amazon-order]
Yes — see [Multi-channel fulfillment](/docs/mcp-api/workflows/mcf).
# Create FBA shipments (https://sellersheetai.com/docs/mcp-api/workflows/fba-shipments)
> The whole Send-to-Amazon run — plan, pack, compare placement fees, pick transport, print labels, upload tracking — by conversation or by code, with your STA sheet as the record.
One sentence starts the plan. You see Amazon's placement fees before anything is confirmed. Labels and tracking follow. Every step is a tool your agent calls — and your own code can call the same tool with the same arguments.
## The shipment day, step by step [#the-shipment-day-step-by-step]
### Start with one sentence [#start-with-one-sentence]
"Create an FBA shipment for these 5 SKUs, 40 units each." `fbaInbound_orchestrate_packing` creates the inbound plan and starts Amazon's packing, placement and transport options in one call. `fbaInbound_create_sta_sheet` gives you an STA spreadsheet that records the whole run.
### Compare placement fees before you commit [#compare-placement-fees-before-you-commit]
`fbaInbound_listPlacementOptions` shows Amazon's warehouse splits with their fees — often the difference between a free split across several warehouses and a paid single destination. You pick; your agent runs `fbaInbound_confirm_plan_options`, which confirms placement and transport in one step. Confirming cannot be undone for that plan, so the money is shown first.
### Pack, label, hand over to the carrier [#pack-label-hand-over-to-the-carrier]
`fbaInbound_setPackingInformation` records what went into each box. `fbaInbound_create_packing_list` writes the packing list from Amazon's own box IDs, `fbaInbound_get_labels` downloads the box-label PDF into the plan folder, and `fbaInbound_createMarketplaceItemLabels` prints FNSKU labels when your products need them.
### Track it until Amazon checks it in [#track-it-until-amazon-checks-it-in]
`fbaInbound_updateShipmentTrackingDetails` uploads the carrier's tracking. `fbaInbound_sync_shipment_status` answers "has Amazon received it yet?" on any day after. Delivering it yourself? `fbaInbound_getSelfShipAppointmentSlots` and `fbaInbound_scheduleSelfShipAppointment` book the dock appointment.
## Try asking [#try-asking]
> "Create an FBA shipment for SKU-A ×40 and SKU-B ×24 from my warehouse — show me the placement options and fees before you confirm anything."
## Step 2, both ways [#step-2-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "Show me the placement options and fees for this plan before confirming anything." Your agent calls `fbaInbound_listPlacementOptions`, lays the splits and fees out for you, and waits for your pick.
Creating plans, confirming options, packing and uploading tracking change your seller account, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Reading plans, options and status works with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label. The workflow tools above call the single-step tools below for you; reach for those when you want to run one step on its own. Most generate/list pairs are asynchronous: *generate* starts the job on Amazon, *list* reads its result.
Every FBA inbound tool:
## FAQ [#faq]
### Can I check stock before I plan? [#can-i-check-stock-before-i-plan]
Yes — `fbaInventory_getInventorySummaries` returns Amazon's live fulfillable and inbound counts for the SKUs you are about to send. See [FBA inventory](/docs/mcp-api/workflows/fba-inventory).
### Will my agent pick an option for me? [#will-my-agent-pick-an-option-for-me]
Not unless you name the rule ("always take the cheapest placement"). Otherwise it shows you the options and waits.
### Can I do this in the Google Sheets add-on instead? [#can-i-do-this-in-the-google-sheets-add-on-instead]
Yes — the FBA panel of the add-on runs the same steps from the STA sheet. See the [add-on buttons](/help/sheets/buttons#sellers-fba).
### Is there a skill for this? [#is-there-a-skill-for-this]
Yes — the `fba-inbound` skill walks your agent through the whole run. See [Install the skills](/docs/start/skills).
# Fee estimator (https://sellersheetai.com/docs/mcp-api/workflows/fees)
> Estimate Amazon's referral and FBA fees for a price before you list or reprice — one item or a batch — by conversation or by code.
Name a price; your agent returns Amazon's own fee estimate — referral fee, FBA fee and the total — so the margin is known before you list, reprice or send stock.
## In your daily workflow [#in-your-daily-workflow]
* **One ASIN** — `productFees_getMyFeesEstimateForASIN` estimates the fees for any ASIN at a price you give.
* **Your SKU** — `productFees_getMyFeesEstimateForSKU` does the same for one of your own listings.
* **A whole list** — `productFees_getMyFeesEstimates` estimates many items in one call; your agent writes them to your sheet beside your costs.
## Try asking [#try-asking]
> "If I price this SKU at 29.99, what are the referral and FBA fees, and my net margin?"
> "Estimate Amazon fees for B0EXAMPLE1 at 29.99."
> "Calculate fees for all my FBA products at their current prices."
## An estimate, both ways [#an-estimate-both-ways]
**MCP** — you ask: "What would Amazon charge on B0EXAMPLE1 at 29.99, fulfilled by Amazon?" Your agent calls `productFees_getMyFeesEstimateForASIN`.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### Are these the fees Amazon will actually charge? [#are-these-the-fees-amazon-will-actually-charge]
They are Amazon's own estimate for that price. What was really charged on an order is in [Financial reports](/docs/mcp-api/workflows/financials).
### What price wins the Buy Box? [#what-price-wins-the-buy-box]
See [Competitive pricing](/docs/mcp-api/workflows/pricing).
# Financial reports (https://sellersheetai.com/docs/mcp-api/workflows/financials)
> Settlements, financial events and transactions — what Amazon charged, credited and paid out, by period or by order.
Ask in money terms — "what did the last settlement pay out?", "which fees hit this order?" — and your agent reads Amazon's financial events and transactions for the period or order you name.
## In your daily workflow [#in-your-daily-workflow]
### Settlement periods [#settlement-periods]
`finances_listFinancialEventGroups` lists your settlement periods; `finances_listFinancialEventsByGroupId` returns every charge, fee and refund inside one of them.
### A date range [#a-date-range]
`finances_listFinancialEvents` lists financial events for a date range; `finances_listTransactions` lists the transactions behind them.
### One order [#one-order]
`finances_listFinancialEventsByOrderId` itemizes what Amazon charged and credited for a single order.
## Try asking [#try-asking]
> "Show me my latest settlement — revenue, refunds and FBA fees."
> "List all financial events from last week."
> "Which fees did Amazon take on order 112-3456789-0000000?"
## The settlement list, both ways [#the-settlement-list-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask for the last settlement; your agent calls `finances_listFinancialEventGroups`, picks the latest period and reads its events.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Can I see settlements across months? [#can-i-see-settlements-across-months]
Yes — your synced financial reports answer that at once with `query_report_data`. See [Synced reports](/docs/mcp-api/workflows/reports).
### How do I estimate fees before I sell? [#how-do-i-estimate-fees-before-i-sell]
See the [Fee estimator](/docs/mcp-api/workflows/fees).
# AI images (https://sellersheetai.com/docs/mcp-api/workflows/images)
> Generate and edit Amazon-ready product images. Every delivered image lands on SellerSheet's CDN and in your store's Image Library, versioned per SKU and slot.
Describe the image, or hand your agent reference images to edit. Jobs run in the background; the finished image comes back as a CDN link and is filed in your Image Library under its store, SKU and slot — nothing is written to Google Drive.
## How it works [#how-it-works]
### Generate or edit [#generate-or-edit]
`generate_image` makes a new image from a description; `edit_image` changes an existing one — swap your product into a scene, recolour a variant, clean up a background. `reverse_prompt` turns a reference shot into a description you can reuse.
### Wait for the job [#wait-for-the-job]
Images take a while, so the call starts a job. `check_image_job` (or `check_image_jobs` for several) reports when it is done and returns the image's CDN link.
### Filed in your library, versioned [#filed-in-your-library-versioned]
Every generate and edit call names the store, the SKU and the slot, so the result is filed in the right place; each new image of a slot becomes the next version. `list_generated_images` lists what is there; the Image Library in the app shows it all.
### Disclose AI people [#disclose-ai-people]
When an image shows a photorealistic person who does not exist, it carries Amazon's synthetic-performer marking. `set_synthetic_performer` changes the marking on an image after the fact.
Images are paid from your [Credits](/help/app/settings/billing). The price is shown and held before the job runs, and refunded when a job fails — a failed image costs nothing. Your store ref is checked before anything is held.
## Try asking [#try-asking]
> "Generate a white-background main image for SKU-A in myStore-US — product on a subtle shadow, no props, compliant with Amazon's main-image rules."
> "Make a white-background main image of my product in the style of this competitor shot."
> "Swap my product into this picture and keep the scene."
## Step 1, both ways [#step-1-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask for the main image above. Your agent calls `generate_image` with the store, SKU and slot, polls `check_image_job`, and shows you the result for review.
Generating and editing create new images in your library and spend Credits, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Listing images and checking jobs only read.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Do the images go to my listing automatically? [#do-the-images-go-to-my-listing-automatically]
No — they wait in your Image Library for review. Put them on a listing through [Create listings](/docs/mcp-api/workflows/listings-create) or [A+ Content](/docs/mcp-api/workflows/aplus).
### Is there a skill for this? [#is-there-a-skill-for-this]
Yes — the `image-gen` skill teaches your agent the compliance rules and the review loop. See [Install the skills](/docs/start/skills).
# Workflows (https://sellersheetai.com/docs/mcp-api/workflows)
> One page per job — FBA, listings, orders, ads, reports, pricing, content, noon, Vendor Central and Google Workspace — done through your AI client or your own code.
Each workflow is one job you hand to your agent. It shows the steps, prompts to try, one call written both ways — as the MCP tool call your AI client sends and as the same call from code — and the tools it uses, with their access labels. The tools and arguments are the same either way. Every tool is in the [tool reference](/docs/mcp-api/tools).
## FBA & inventory [#fba--inventory]
* [Create FBA shipments](/docs/mcp-api/workflows/fba-shipments) — plan, pack, compare placement fees, label, track.
* [FBA inventory](/docs/mcp-api/workflows/fba-inventory) — live stock before you act, restock analysis on synced reports.
* [Multi-channel fulfillment](/docs/mcp-api/workflows/mcf) — ship orders from other channels out of your FBA stock.
## Listings [#listings]
* [View & search listings](/docs/mcp-api/workflows/listings-view) — your catalog, its status and its issues.
* [Create listings](/docs/mcp-api/workflows/listings-create) — new products from product-type templates, validated before they go.
* [Attributes & Publish Queue](/docs/mcp-api/workflows/listings-attributes) — flat sheet cells to Amazon attributes, in bulk.
* [Optimize listings](/docs/mcp-api/workflows/listings-optimize) — reviews, competitors, keywords and images into a better listing.
## Orders & finance [#orders--finance]
* [Orders](/docs/mcp-api/workflows/orders) — today's orders live, history from your synced data.
* [Sales analytics](/docs/mcp-api/workflows/sales) — units, orders and revenue over any period.
* [Financial reports](/docs/mcp-api/workflows/financials) — settlements, financial events and transactions.
## Advertising [#advertising]
* [Sponsored Products](/docs/mcp-api/workflows/ads-sp) — campaigns, targets, bids and budgets.
* [Sponsored Brands](/docs/mcp-api/workflows/ads-sb) — brand campaigns and their recommendations.
* [Sponsored Display](/docs/mcp-api/workflows/ads-sd) — display campaigns, targeting and budgets.
* [Ad reports](/docs/mcp-api/workflows/ads-reports) — performance reports for every ad type.
* [Ads account & brand](/docs/mcp-api/workflows/ads-account) — accounts, invoices, brands, Stores and event streams.
## Reports & data [#reports--data]
* [Synced reports](/docs/mcp-api/workflows/reports) — query your report warehouse instantly.
* [On-demand reports](/docs/mcp-api/workflows/reports-ondemand) — request a fresh report from Amazon.
* [Data Kiosk](/docs/mcp-api/workflows/datakiosk) — GraphQL analytics datasets.
## Pricing, fees & replenishment [#pricing-fees--replenishment]
* [Competitive pricing](/docs/mcp-api/workflows/pricing) — Buy Box, lowest offers, Featured Offer price.
* [Fee estimates](/docs/mcp-api/workflows/fees) — referral and FBA fees before you price.
* [Replenishment](/docs/mcp-api/workflows/replenishment) — Subscribe & Save metrics and offers.
## Content & buyers [#content--buyers]
* [A+ Content](/docs/mcp-api/workflows/aplus) — create, publish, relink and suspend A+.
* [Review insights](/docs/mcp-api/workflows/reviews) — what buyers praise, complain about and return.
* [AI images](/docs/mcp-api/workflows/images) — generate and edit product images into your Image Library.
## noon & Vendor Central [#noon--vendor-central]
* [Selling on noon](/docs/mcp-api/workflows/noon) — catalog, pricing, stock, FBN inbound and reports.
* [Vendor Central](/docs/mcp-api/workflows/vendor) — purchase orders, shipments and invoices.
## Google Workspace [#google-workspace]
* [Google Sheets](/docs/mcp-api/workflows/sheets) — where your agent records results for review.
* [Google Docs](/docs/mcp-api/workflows/docs) — reports and SOPs in one call.
* [Google Drive](/docs/mcp-api/workflows/drive) — files in your SellerSheet workspace.
# Attributes & Publish Queue (https://sellersheetai.com/docs/mcp-api/workflows/listings-attributes)
> Turn flat spreadsheet cells into Amazon-shaped attribute JSON and back, validate, and publish many listings at once from a Publish Queue sheet.
Seed a Publish Queue sheet for one or more product types, fill flat cells (or fetch what Amazon already has), then submit. SellerSheet translates each cell to the attribute shape Amazon expects, and back again.
## Step by step [#step-by-step]
### Seed the sheet [#seed-the-sheet]
"Prepare a Publish Queue template for product type LUGGAGE." `listings_prepare_publish_queue_template` bundles everything needed to set up a Publish Queue tab for one or several product types — columns merged across types, required ones first.
### Fill it — or start from what is live [#fill-it--or-start-from-what-is-live]
`listings_fetch_attributes_by_skus` fetches your own listings and flattens their attributes into cells; `listings_fetch_attributes_by_asins` does the same for any ASIN's catalog attributes, and `listings_parse_asin_to_cells` maps one ASIN onto the sheet's columns. `listings_get_attribute_guide` explains an attribute: its format, units and allowed values.
### Check the translation [#check-the-translation]
`listings_build_payload` turns flat values into Amazon's attribute JSON so you can see exactly what will be sent; `listings_parse_payload` does the reverse.
### Submit [#submit]
`listings_submit_items` builds and submits per SKU in one step; `listings_submit_feed` sends a whole batch through Amazon's Feeds API, and `listings_poll_feed_results` reads back what Amazon accepted or rejected.
## Try asking [#try-asking]
> "Prepare a Publish Queue template for product type LUGGAGE."
> "Fetch the current attributes for these 50 ASINs and flatten them into my sheet."
> "Submit the rows I changed."
## Seeding the template, both ways [#seeding-the-template-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you name the product types; your agent calls `listings_prepare_publish_queue_template` and writes the template into your sheet with the sheet tools.
Submitting items or a feed changes your listings, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Templates, fetches, guides and payload previews work with read access. A submitted update replaces the listing's attributes with the row, so fetch first and edit from there.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Can I check rows before submitting? [#can-i-check-rows-before-submitting]
Yes — `listings_validate_rows` runs Amazon's validation preview on the rows first. See [Create listings](/docs/mcp-api/workflows/listings-create).
### Can I do this in the Google Sheets add-on? [#can-i-do-this-in-the-google-sheets-add-on]
Yes — the add-on's catalog panel runs the same Publish Queue from the sidebar. See the [add-on buttons](/help/sheets/buttons#sellers-catalogs).
### Where do I find which listings need work? [#where-do-i-find-which-listings-need-work]
Start with [View & search listings](/docs/mcp-api/workflows/listings-view).
# Create listings (https://sellersheetai.com/docs/mcp-api/workflows/listings-create)
> List new products on Amazon from the product type's own schema — find the type, fill the required attributes, validate, then submit.
Your agent finds the product type, reads its schema, fills the attributes with you, checks them with Amazon's validation preview and only then creates the listing.
## Step by step [#step-by-step]
### Find the product type [#find-the-product-type]
"I'm listing a new yoga mat." `productTypeDefinitions_searchDefinitionsProductTypes` finds the matching Amazon product types by keyword.
### Read what Amazon requires [#read-what-amazon-requires]
`productTypeDefinitions_getDefinitionsProductType` returns the full schema for that type — every attribute, which ones are required, and their allowed values.
### Validate before you publish [#validate-before-you-publish]
`listings_validate_rows` runs Amazon's validation preview on your rows and returns the issues it would raise — nothing goes live.
### Create or change the listing [#create-or-change-the-listing]
`listings_putListingsItem` creates a listing (or fully replaces one); `listings_patchListingsItem` changes only the attributes you name on an existing listing. For many SKUs at once, use the Publish Queue — see [Attributes & Publish Queue](/docs/mcp-api/workflows/listings-attributes).
## Try asking [#try-asking]
> "Create a listing for a new yoga mat in the Sports category — check it with Amazon's validation first."
> "Show me the required attributes for the product type SPORTING_GOODS."
## The schema lookup, both ways [#the-schema-lookup-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you describe the product; your agent calls `productTypeDefinitions_searchDefinitionsProductTypes`, suggests the best match, and asks before going on.
Creating, replacing or patching a listing changes your seller account, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Searching product types and reading schemas work with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Can I list many products at once? [#can-i-list-many-products-at-once]
Yes — prepare a Publish Queue sheet for the product type and submit it as one feed. See [Attributes & Publish Queue](/docs/mcp-api/workflows/listings-attributes).
### Is replacing a listing safe? [#is-replacing-a-listing-safe]
`listings_putListingsItem` replaces the whole listing with what you send, so your agent fetches the current attributes first ([View & search listings](/docs/mcp-api/workflows/listings-view)). To change one field, patch it instead.
# Optimize listings (https://sellersheetai.com/docs/mcp-api/workflows/listings-optimize)
> Improve titles, bullets, images and A+ content with your own agent — grounded in your reviews, your competitors and Amazon's own data.
Optimizing a listing is several reads and a few careful writes: what buyers say, what competitors show, what Amazon has on file, then new copy and images you approve before anything is submitted.
## Step by step [#step-by-step]
### Learn what buyers say [#learn-what-buyers-say]
`customerFeedback_getItemReviewTopics` lists the topics buyers praise and complain about most on your ASIN — the raw material for better bullets. See [Review insights](/docs/mcp-api/workflows/reviews).
### See what competitors show [#see-what-competitors-show]
`catalogItems_searchCatalogItems` and `catalogItems_getCatalogItem` pull competitors' titles, bullets and images; `productPricing_getCompetitiveSummary` shows where your price sits.
### Start from what is live [#start-from-what-is-live]
`listings_fetch_attributes_by_asins` puts your current title, bullets and attributes side by side in a sheet, so every change is visible as an edit.
### Rewrite, review, submit [#rewrite-review-submit]
Your agent drafts new copy in the sheet for you to edit; new images come from [AI image generation](/docs/mcp-api/workflows/images) and A+ from the [A+ workflow](/docs/mcp-api/workflows/aplus). When you approve, `listings_patchListingsItem` updates just the attributes you changed.
## Try asking [#try-asking]
> "Optimize the listing for ASIN B0EXAMPLE1 — start from its reviews and its three closest competitors, and put the proposed title and bullets next to the current ones in a sheet."
A listing-optimization skill that runs this end to end — reviews, competitors, keywords, images, A+ and a PPC plan — is on the way to the [skills catalog](/docs/skills).
## The review read, both ways [#the-review-read-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "What do buyers complain about most on B0EXAMPLE1?" Your agent calls `customerFeedback_getItemReviewTopics` and turns the topics into copy ideas.
Patching a listing changes your seller account, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Every read on this page works with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Does copy or image generation use Credits? [#does-copy-or-image-generation-use-credits]
Images and buyer-insights reports use Credits; see [Credits & limits](/help/app/settings/billing).
### Can I change many listings at once? [#can-i-change-many-listings-at-once]
Yes — through a Publish Queue sheet. See [Attributes & Publish Queue](/docs/mcp-api/workflows/listings-attributes).
# View & search listings (https://sellersheetai.com/docs/mcp-api/workflows/listings-view)
> Search your whole catalog, find suppressed or errored listings, and pull everything into a Google Sheet for review — or look up any ASIN on Amazon.
Ask for the listings you care about — by keyword, ASIN, SKU, status or issue — and your agent searches your catalog, explains what is wrong, and can write the list to a sheet for you to work through.
## In your daily workflow [#in-your-daily-workflow]
### Find listings with issues [#find-listings-with-issues]
"Show me every listing that is suppressed or has warnings." `listings_searchListingsItems` filters your catalog by status and issue severity (ERROR means suppressed) and returns the reasons Amazon gives.
### Look closer at one SKU [#look-closer-at-one-sku]
`listings_getListingsItem` returns what Amazon has on file for one SKU right now: attributes, offers, status and issues.
### Audit in bulk [#audit-in-bulk]
`listings_fetch_attributes_by_skus` (your SKUs) and `listings_fetch_attributes_by_asins` (any ASIN) pull full attribute sets for a batch at once — the starting point for a side-by-side review in your sheet. See [Attributes & Publish Queue](/docs/mcp-api/workflows/listings-attributes).
### Look up any product on Amazon [#look-up-any-product-on-amazon]
`catalogItems_searchCatalogItems` searches the Amazon catalog by keyword or identifier (ASIN, UPC, EAN); `catalogItems_getCatalogItem` returns the detail of one ASIN — competitors' included. `listings_getListingsRestrictions` tells you whether you may sell an ASIN, and in which condition.
## Try asking [#try-asking]
> "Show me all my listings that have issues or are suppressed."
> "Write them to a sheet, and show me the suppressed ones first."
Your agent lists each problem with Amazon's reason — a missing main image, a restricted category waiting for approval, a missing description — and writes the rows to the sheet you name.
## The search, both ways [#the-search-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "Which of my listings are suppressed?" Your agent calls `listings_searchListingsItems` with an issue filter, pages through the results, and explains each one.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### How does my agent get past the first page? [#how-does-my-agent-get-past-the-first-page]
It passes the page token from each result into the next call. See [Paging](/docs/mcp-api/paging).
### Found the problem — how do I fix it? [#found-the-problem--how-do-i-fix-it]
Edit the attributes in a Publish Queue sheet and submit them — see [Attributes & Publish Queue](/docs/mcp-api/workflows/listings-attributes) — or ask your agent to change one attribute with a patch ([Create listings](/docs/mcp-api/workflows/listings-create)).
# Multi-channel fulfillment (https://sellersheetai.com/docs/mcp-api/workflows/mcf)
> Ship orders from any sales channel — Shopify, TikTok Shop, your own site — out of your FBA inventory, with the fee shown before anything ships.
Preview the fee and delivery speed for an order, create it once you agree, and track the package — Amazon picks, packs and ships from your FBA stock.
## Step by step [#step-by-step]
### Preview before committing [#preview-before-committing]
`fbaOutbound_getFulfillmentPreview` returns the delivery-speed options and fulfillment fees for an order you describe — SKU, quantity and address — without creating anything. `fbaOutbound_deliveryOffers` answers "how fast can this arrive?" for one product.
### Create the fulfillment order [#create-the-fulfillment-order]
On your go-ahead, `fbaOutbound_createFulfillmentOrder` hands the order to Amazon, which picks, packs and ships it from your FBA stock.
### Track every package [#track-every-package]
`fbaOutbound_getFulfillmentOrder` shows the order's status and shipments; `fbaOutbound_getPackageTrackingDetails` gives the carrier, tracking number and delivery estimate.
### Handle changes [#handle-changes]
`fbaOutbound_updateFulfillmentOrder` changes an order that has not shipped, `fbaOutbound_cancelFulfillmentOrder` cancels it, and `fbaOutbound_createFulfillmentReturn` creates a return — `fbaOutbound_listReturnReasonCodes` lists the reasons Amazon accepts.
## Try asking [#try-asking]
> "A customer on my Shopify store ordered 2 units of SKU-A. Ship it from FBA to their address at standard speed — show me the fee first."
## The preview, both ways [#the-preview-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you paste the address and the SKU. Your agent calls `fbaOutbound_getFulfillmentPreview`, shows you the fee and delivery window for each speed, and creates the order only when you confirm.
Creating, updating, cancelling or returning a fulfillment order changes your seller account, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Previews, offers and tracking work with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Is my stock enough? [#is-my-stock-enough]
Check first with [FBA inventory](/docs/mcp-api/workflows/fba-inventory).
### Does a preview reserve stock or cost anything? [#does-a-preview-reserve-stock-or-cost-anything]
No — a preview creates nothing. Only `fbaOutbound_createFulfillmentOrder` places an order.
# Selling on noon (https://sellersheetai.com/docs/mcp-api/workflows/noon)
> Run your noon store (UAE, Saudi Arabia, Egypt) the same way as Amazon — catalog and content, pricing, stock, FBN inbound and synced reports.
Connect your noon Partners account once, and your agent works on noon with the same kind of request it uses on Amazon. A noon store ref is `-`, like .
## Before you start [#before-you-start]
Connect the account in the app: **Settings → Stores & Marketplaces → Add a noon account**. noon marketplaces count against the same plan marketplace quota as your Amazon marketplaces — so a noon account can be the reason an Amazon marketplace has no slot left. See [Connect your store](/docs/start/connect).
## In your daily workflow [#in-your-daily-workflow]
### Catalog and content [#catalog-and-content]
`noon_content_GetContent` reads a product; `noon_content_UpsertProduct` creates or updates one. `noon_content_draft_from_amazon_asin` drafts a noon product from one of your Amazon ASINs. For bulk work, `noon_content_prepare_publish_queue_template` and `noon_content_load_publish_queue_content` load drafts and live listings into your sheet for review before publishing.
### Pricing, stock and offers [#pricing-stock-and-offers]
`noon_pricing_BatchGetPricing` and `noon_pricing_BatchUpsertPricing` read and change prices in batches; `noon_stock_GetStock` and `noon_stock_UpdateStock` do the same for stock; `noon_offer_GetProductOffers` shows the live offers on a product. Cross-border transfer prices have their own tools.
### FBN inbound [#fbn-inbound]
Eligible items, shipment creation, slot booking, item updates and status changes — the whole FBN inbound flow, starting from `noon_inbound_ListEligibleItems`. noon offers its inbound API to global sellers only; on other accounts noon refuses these calls.
### Synced noon reports [#synced-noon-reports]
Orders, finance and transactions, FBN inventory aging, and product views and sales sync into your warehouse on a schedule. Your agent queries them with `query_report_data`, exactly like Amazon report tables — see [Data](/docs/data).
## Try asking [#try-asking]
> "Update stock for all my noon SKUs from the Stock tab of my sheet."
> "What were my noon sales in Saudi Arabia last week compared with Amazon.ae?"
> "Create an FBN inbound shipment for the 40 units arriving Thursday."
## Reading stock, both ways [#reading-stock-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "How much stock does myNoon-AE have for SKU-A?" Your agent finds the warehouse with `noon_warehouse_platform_ListWarehouses`, then calls `noon_stock_GetStock`.
Changing products, prices, stock and inbound shipments changes your noon account, so you need write access to it (see [Stay in control](/docs/mcp-api/control)). Reading works with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Is there a skill for noon? [#is-there-a-skill-for-noon]
Yes — `noon-report-data` for the synced noon tables and `fbn-inbound` for FBN shipments. See [Install the skills](/docs/start/skills).
### Can I copy my Amazon listings to noon? [#can-i-copy-my-amazon-listings-to-noon]
Yes — start from `noon_content_draft_from_amazon_asin`, review the draft, then publish it.
# Track orders (https://sellersheetai.com/docs/mcp-api/workflows/orders)
> Triage today's orders and answer a buyer in one ask — and leave history and totals to your synced order data, which answers instantly.
Two live tools cover order tracking: search across orders, then drill into one. For history and totals, your synced order data answers at once, with no call to Amazon.
## In your daily workflow [#in-your-daily-workflow]
### Morning check [#morning-check]
"Any unshipped orders?" `orders_searchOrders` filters by fulfillment status and date, so you triage pending, unshipped or cancelled orders in one ask.
### A buyer writes in [#a-buyer-writes-in]
Paste the order ID. `orders_getOrder` returns that one order in full — status, items, shipping service, tracking — everything you need to answer the message.
### "How did last month do?" [#how-did-last-month-do]
That is not an Orders-API question. Your orders sync into the warehouse continuously, and `query_report_data` answers revenue, units and repeat-buyer questions over any date range at once. See [Synced reports](/docs/mcp-api/workflows/reports).
### "Where is the money for this order?" [#where-is-the-money-for-this-order]
`finances_listFinancialEventsByOrderId` itemizes the charges, fees and refunds behind one order. See [Financial reports](/docs/mcp-api/workflows/financials).
## Try asking [#try-asking]
> "Show me unshipped orders from the last 7 days for myStore-US."
> "What's the status of order 111-1234567-1234567?"
## The search, both ways [#the-search-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask for unshipped orders; your agent calls `orders_searchOrders` with a status filter and a date range, pages through the results, and can write the list to your sheet to work through.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Do orders show the buyer's name and address? [#do-orders-show-the-buyers-name-and-address]
No. SellerSheet does not hold Amazon's restricted-data role, so an order shows at most the delivery city, country and postal code. See [Data we never see](/docs/start/privacy).
### Live or synced? [#live-or-synced]
Live Orders tools for today's operational questions; synced data for anything historical or aggregated — it is faster and does not use Amazon's rate limits. For totals by period, also see [Sales analytics](/docs/mcp-api/workflows/sales).
# Competitive pricing (https://sellersheetai.com/docs/mcp-api/workflows/pricing)
> Buy Box, lowest offers and the price that wins the Featured Offer — for your SKUs or any ASIN, one at a time or in batches.
Ask where your price stands and your agent reads Amazon's pricing data: your own offer, the competitive and lowest prices, and the expected price to win the Featured Offer.
## In your daily workflow [#in-your-daily-workflow]
### Where do I stand? [#where-do-i-stand]
`productPricing_getCompetitiveSummary` returns the featured buying options, reference prices and lowest offers for up to 20 ASINs in one call. `productPricing_getPricing` and `productPricing_getCompetitivePricing` give your own and the competitive prices.
### Who is undercutting me? [#who-is-undercutting-me]
`productPricing_getItemOffers` lists the lowest-priced offers on an ASIN; `productPricing_getListingOffers` does the same for one of your SKUs. Their batch versions take many at once.
### What price wins the Featured Offer? [#what-price-wins-the-featured-offer]
`productPricing_getFeaturedOfferExpectedPriceBatch` returns the price Amazon expects to win the Featured Offer for your SKUs.
## Try asking [#try-asking]
> "Check competitive pricing for ASIN B0EXAMPLE1."
> "What are the Buy Box and lowest prices for my top 10 products right now?"
> "Roughly what price would win the Featured Offer?"
## The summary, both ways [#the-summary-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you list the ASINs; your agent calls `productPricing_getCompetitiveSummary` and lays out where each one stands.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label. Every pricing tool only reads; changing a price goes through your listings (see [Attributes & Publish Queue](/docs/mcp-api/workflows/listings-attributes)).
## FAQ [#faq]
### What would my margin be at that price? [#what-would-my-margin-be-at-that-price]
Ask for the fees at that price — see the [Fee estimator](/docs/mcp-api/workflows/fees).
### Can I track prices over time? [#can-i-track-prices-over-time]
Ask your agent to write each check to a sheet tab with the date; for synced history, see [Synced reports](/docs/mcp-api/workflows/reports).
# Replenishment (Subscribe & Save) (https://sellersheetai.com/docs/mcp-api/workflows/replenishment)
> Subscribe & Save performance — your program metrics, per-offer metrics and which offers are eligible — by conversation or by code.
Three read-only tools answer how your Subscribe & Save program is doing: overall, offer by offer, and which offers can join.
## In your daily workflow [#in-your-daily-workflow]
* **The program as a whole** — `replenishment_getSellingPartnerMetrics` returns your aggregated Subscribe & Save performance for a period, looking back or forecast ahead.
* **Offer by offer** — `replenishment_listOfferMetrics` returns the same metrics per ASIN or SKU.
* **Who can join** — `replenishment_listOffers` lists your offers with their eligibility and customer preferences.
## Try asking [#try-asking]
> "Show my Subscribe & Save partner metrics for last month."
> "List my replenishment offers and their eligibility."
## Program metrics, both ways [#program-metrics-both-ways]
**MCP** — you ask: "How did Subscribe & Save do in September?" Your agent calls `replenishment_getSellingPartnerMetrics`.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### Does this change any offer? [#does-this-change-any-offer]
No — every tool here reads.
### Where are sales overall? [#where-are-sales-overall]
See [Sales analytics](/docs/mcp-api/workflows/sales).
# On-demand reports (https://sellersheetai.com/docs/mcp-api/workflows/reports-ondemand)
> Request a report straight from Amazon when the synced copy is not enough — create, wait, download — and set up recurring report schedules.
For any report type Amazon offers, your agent asks Amazon to build it, polls until it is done and reads the document. Use it for reports that are not synced, or when you need the very latest data.
## Create, wait, download [#create-wait-download]
### Ask for the report [#ask-for-the-report]
`reports_createReport` submits the request with the report type and date range. Your agent picks the report type from what you describe — "the All Listings report", "Brand Analytics search query performance".
### Wait for Amazon [#wait-for-amazon]
Amazon builds reports in the background, from seconds to many minutes. `reports_getReport` checks the status and, once it is done, downloads the document.
### Reuse what exists [#reuse-what-exists]
`reports_getReports` lists reports Amazon already built for the store; `reports_cancelReport` stops one still in the queue.
## Recurring reports [#recurring-reports]
`reports_createReportSchedule` asks Amazon to build a report on a fixed cadence; `reports_getReportSchedules`, `reports_getReportSchedule` and `reports_cancelReportSchedule` list, read and stop schedules.
## Try asking [#try-asking]
> "Request a fresh inventory report from Amazon."
> "Pull the Brand Analytics search query performance report — what's my click share on these terms?"
> "Download my latest settlement report."
## A request, both ways [#a-request-both-ways]
**MCP** — you ask: "Get me a fresh All Listings report." Your agent calls `reports_createReport`, then `reports_getReport` until it is done.
Creating or cancelling a recurring schedule changes your seller account's settings, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). One-off report requests and downloads are reads.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### Synced or on demand? [#synced-or-on-demand]
Synced first — it is instant. See [Synced reports](/docs/mcp-api/workflows/reports).
### How does my agent know a report's fields? [#how-does-my-agent-know-a-reports-fields]
The `amazon-report` skill carries the report types, options and field names of the common reports. See [Install the skills](/docs/start/skills).
### Is there a GraphQL option? [#is-there-a-graphql-option]
Yes — [Data Kiosk](/docs/mcp-api/workflows/datakiosk).
# Synced reports (https://sellersheetai.com/docs/mcp-api/workflows/reports)
> Your Amazon and noon reports, synced on a schedule into your own tables — your agent queries them in seconds, months back, without waiting on Amazon.
SellerSheet syncs report tables for every connected store — inventory, listings, orders, returns, settlements, Data Kiosk sales and traffic, every Sponsored Products, Brands and Display report, and noon. `query_report_data` filters, joins and totals them instantly.
## How it works [#how-it-works]
### Reports sync on their own [#reports-sync-on-their-own]
Each table has its own schedule, set when the store connects. Nothing to request, nothing to wait for. `list_report_syncs` shows what syncs for a store and when it last ran.
### Your agent reads the schema first [#your-agent-reads-the-schema-first]
`get_table_schema` returns the columns, types and unique key of one table, so the query uses real column names. Every table also has its own page on the [Data](/docs/data) tab.
### One query, any date range [#one-query-any-date-range]
`query_report_data` takes the tables, columns, filters, grouping and sort — results come back in seconds and do not use Amazon's rate limits. Your agent writes them to your sheet when you work there.
## Try asking [#try-asking]
> "What were my top 10 products by revenue last month?"
> "From the synced inventory reports, find stock that hasn't sold in over 90 days."
> "Total sales and sessions by week for the last 3 months, as a trend table."
## A query, both ways [#a-query-both-ways]
**MCP** — you ask: "How many orders did I get yesterday?" Your agent calls `query_report_data` on the orders table.
## Tools on this page [#tools-on-this-page]
## FAQ [#faq]
### I need data fresher than the last sync. [#i-need-data-fresher-than-the-last-sync]
Request a report from Amazon directly — see [On-demand reports](/docs/mcp-api/workflows/reports-ondemand) — or call the live tool for that area, such as [Orders](/docs/mcp-api/workflows/orders) or [FBA inventory](/docs/mcp-api/workflows/fba-inventory).
### Where is the list of tables? [#where-is-the-list-of-tables]
On the [Data](/docs/data) tab — each table with its report type, cadence and columns.
### Is there a skill for this? [#is-there-a-skill-for-this]
Yes — the `report-data` skill teaches your agent the tables and the query patterns. See [Install the skills](/docs/start/skills).
# Review insights (https://sellersheetai.com/docs/mcp-api/workflows/reviews)
> Learn what buyers praise and complain about — for your ASIN and for your whole category — and ask delivered orders for a review.
Your agent reads Amazon's review topics and trends for an ASIN or a category, return reasons for the category, and can write a buyer-insights report. It can also send Amazon's review request to delivered orders.
## In your daily workflow [#in-your-daily-workflow]
### What buyers say about your product [#what-buyers-say-about-your-product]
`customerFeedback_getItemReviewTopics` returns the top positive and negative topics for your ASIN; `customerFeedback_getItemReviewTrends` shows how they move month to month.
### What buyers say about the category [#what-buyers-say-about-the-category]
`customerFeedback_getItemBrowseNode` finds the ASIN's category; `customerFeedback_getBrowseNodeReviewTopics`, `customerFeedback_getBrowseNodeReturnTopics` and their trend twins show what the whole category is praised for and returned for.
### A report to work from [#a-report-to-work-from]
`customerFeedback_insights_report` writes a buyer-insights report to guide your copy and images; `customerFeedback_insights_report_status` tells you when it is ready. The report is paid from [Credits](/help/app/settings/billing) — priced before it runs, refunded if it fails.
### Ask for reviews [#ask-for-reviews]
`solicitations_getSolicitationActionsForOrder` checks whether an order can be asked; `solicitations_createProductReviewAndSellerFeedbackSolicitation` sends Amazon's own review request.
## Try asking [#try-asking]
> "What are the 10 things buyers praise and complain about most on this ASIN?"
> "How have return reasons in this category trended over 6 months?"
> "Send a review request to these delivered orders."
## Step 1, both ways [#step-1-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "What are the top review complaints for B0EXAMPLE1?" Your agent calls `customerFeedback_getItemReviewTopics` and summarises them.
Sending review requests acts on your seller account, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Reading topics and trends works with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Can I turn the insights into new copy and images? [#can-i-turn-the-insights-into-new-copy-and-images]
Yes — hand them to [A+ Content](/docs/mcp-api/workflows/aplus) or [AI images](/docs/mcp-api/workflows/images).
### Is there a skill for the report? [#is-there-a-skill-for-the-report]
Yes — see [Install the skills](/docs/start/skills).
# Sales analytics (https://sellersheetai.com/docs/mcp-api/workflows/sales)
> Units, orders and revenue over any period — bucketed by hour, day, week or month — straight from Amazon or from your synced sales data.
"How much did I sell?" has two answers: Amazon's order metrics for a quick series over a period, and your synced sales data for breakdowns by ASIN, SKU or anything you can join.
## In your daily workflow [#in-your-daily-workflow]
### A quick number or trend [#a-quick-number-or-trend]
`sales_getOrderMetrics` returns units, order count and revenue for an interval, bucketed by hour, day, week, month or year — or one total. Filter it to one ASIN or SKU.
### A breakdown [#a-breakdown]
"Units sold by ASIN for March" or "sales and sessions by week" is an analysis over your synced sales and traffic tables through `query_report_data`. See [Synced reports](/docs/mcp-api/workflows/reports).
## Try asking [#try-asking]
> "What were my total sales last month?"
> "Show me units sold by ASIN for March 2026."
> "Total sales and sessions by week for the last 3 months, as a trend table."
## The metrics call, both ways [#the-metrics-call-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask for last month's total; your agent calls `sales_getOrderMetrics` with the month as the interval and Total as the bucket.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Which should my agent use? [#which-should-my-agent-use]
A period total or a simple series: `sales_getOrderMetrics`. Anything per ASIN, per SKU or joined with stock, ads or fees: the synced data.
### Where are fees and payouts? [#where-are-fees-and-payouts]
In [Financial reports](/docs/mcp-api/workflows/financials).
# Google Sheets (https://sellersheetai.com/docs/mcp-api/workflows/sheets)
> Your agent's tools for the sheet — read, write, format, filter, chart and protect — so results land where your team reviews them.
The Amazon and noon tools never write to a sheet themselves. When you work in a Google Sheet, your agent records results there with these tools: headers, formats, filters and dropdowns included. You review and edit in the sheet, then say "submit the rows I changed".
## How your agent uses the sheet [#how-your-agent-uses-the-sheet]
### Read what is there [#read-what-is-there]
`list_sheet_tabs` and `get_sheet_metadata` show the workbook; `read_sheet` reads a range, `get_sheet_cell` one cell with its dropdown and note, `get_sheet_notes` the notes on a tab.
### Write results [#write-results]
`write_sheet` writes a block of values, `append_sheet_rows` adds rows at the end, `write_sheet_formula` writes formulas, `import_sheet_tsv` drops in a whole report. `setup_sheet` and `add_sheet_tab` build a new tab.
### Make it readable [#make-it-readable]
`format_sheet_range`, `set_sheet_number_format`, `freeze_sheet_panes`, `autofit_sheet_columns` and `apply_sheet_table_style` format it; `add_sheet_conditional_format`, `add_sheet_chart` and `insert_sheet_sparkline` add the visuals.
### Make it a working surface [#make-it-a-working-surface]
`add_sheet_dropdown` puts Amazon's own values in a column, `create_sheet_filter` and `sort_sheet_range` order the rows, `protect_sheet_range` locks what nobody should edit. `sheet_batch_update` is the escape hatch for anything else.
## Try asking [#try-asking]
> "Read the data from my Sales spreadsheet."
> "Format the header row of my listings sheet, freeze it, and add a filter."
## Reading a range, both ways [#reading-a-range-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "What's in A1:F20 of my Sales tab?" Your agent calls `read_sheet`.
The write and format tools change the workbook you name — never your Amazon account. A sheet must be one your Google account can open.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Is there a skill for building good sheets? [#is-there-a-skill-for-building-good-sheets]
Yes — `sellersheet-sheets` (sheet building, formats, live data) and `sellersheet-dashboard` (multi-tab dashboards). See [Install the skills](/docs/start/skills).
### What about the Google Sheets add-on? [#what-about-the-google-sheets-add-on]
The add-on's buttons run their own workflows inside the sheet — see the [add-on buttons](/help/sheets/buttons). Docs and Drive have their own pages: [Google Docs](/docs/mcp-api/workflows/docs), [Google Drive](/docs/mcp-api/workflows/drive).
# Vendor Central (https://sellersheetai.com/docs/mcp-api/workflows/vendor)
> Purchase orders, acknowledgements, shipments, labels and invoices for 1P vendors — read, decide, submit.
Connect a Vendor Central store and your agent lists and reads your purchase orders, accepts or rejects them, submits shipments and confirmations, downloads labels, submits invoices and checks each submission's status.
## In your daily workflow [#in-your-daily-workflow]
### See what Amazon ordered [#see-what-amazon-ordered]
`vendorOrders_getPurchaseOrders` lists your purchase orders — a window of up to 7 days per call, so your agent pages through longer ranges. `vendorOrders_getPurchaseOrder` returns one PO in full; `vendorOrders_getPurchaseOrdersStatus` gives the status list.
### Accept or reject [#accept-or-reject]
`vendorOrders_submitAcknowledgement` accepts or rejects one or more POs, item by item.
### Ship and confirm [#ship-and-confirm]
`vendorShipments_SubmitShipments` submits shipment requests and waits for Amazon's answer; `vendorShipments_SubmitShipmentConfirmations` confirms shipments in a batch. `vendorShipments_GetShipmentDetails` and `vendorShipments_GetShipmentLabels` read shipment details and download small-parcel labels.
### Invoice and check [#invoice-and-check]
`vendorInvoices_submitInvoices` submits invoices for payment. Submissions are asynchronous; `vendorTransactionStatus_getTransaction` tells you whether Amazon accepted them.
## Try asking [#try-asking]
> "Show me my pending purchase orders."
> "Accept every line of PO 1ABCD234 we can fill, reject the rest, and submit the invoice once it ships."
## Step 1, both ways [#step-1-both-ways]
The same tool and the same arguments — through your AI client, or from your own code.
**MCP** — you ask: "Show me this week's new purchase orders." Your agent calls `vendorOrders_getPurchaseOrders` and lays them out for you.
Acknowledgements, shipments, confirmations and invoices change your vendor account, so the store needs write access (see [Stay in control](/docs/mcp-api/control)). Reading orders, shipments and transaction status works with read access.
## Tools on this page [#tools-on-this-page]
Pulled from the catalog at build time, each with its own access label.
## FAQ [#faq]
### Which account types work? [#which-account-types-work]
A Vendor Central store connected in the app, one marketplace at a time. See [Connect your store](/docs/start/connect).
### Can I get vendor reports too? [#can-i-get-vendor-reports-too]
Yes — through [On-demand reports](/docs/mcp-api/workflows/reports-ondemand) and [Data Kiosk](/docs/mcp-api/workflows/datakiosk).
# Skills (https://sellersheetai.com/docs/skills)
> Released skills that teach your AI the best practice for each job.
The public skills, read from their released SKILL.md files.
A skill is a short, versioned instruction file your agent loads when a job matches it: the steps, the checks and the tool calls that make that job go right — building a sheet, running an FBA shipment, querying synced reports, managing Ads. The MCP server gives your agent the tools; skills give it the best practice. They install as one bundle — on Claude Code, Codex and CodeBuddy the SellerSheet plugin adds them and the server in one step. See [Install the skills](/docs/start/skills).
## What do you want done? [#what-do-you-want-done]
Pick the job. Each card shows what the skill can change — worked out from the tools it calls, not written by hand — how many tools it calls, and where the same job works: with your AI, in the Google Sheets sidebar or in the web app.
# ChatGPT (https://sellersheetai.com/docs/start/clients/chatgpt)
> Connect SellerSheet to ChatGPT as a custom connector in developer mode, signed in with OAuth.
ChatGPT connects to remote MCP servers as a custom connector in developer mode.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* A paid ChatGPT plan — developer mode is available on paid plans.
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
## Step 2: Add SellerSheet in ChatGPT [#step-2-add-sellersheet-in-chatgpt]
1. In ChatGPT, open **Settings → Apps & Connectors → Advanced settings** and turn on **Developer mode**.
2. Back in **Apps & Connectors**, choose **Create**, name it `SellerSheet`, and paste `https://sellersheetai.com/mcp` as the MCP server URL with OAuth authentication.
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. Sign in to SellerSheet when the browser asks, then enable the connector in a chat.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### The browser never opens [#the-browser-never-opens]
Update the client — older versions don't support MCP sign-in — or use an [API key](/docs/mcp-api/keys).
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# Claude Code (https://sellersheetai.com/docs/start/clients/claude-code)
> Add the SellerSheet MCP server to Claude Code with one command and sign in with /mcp — or reference an API key from .mcp.json.
Add SellerSheet to Claude Code from the terminal, then sign in from inside a session.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* Claude Code installed.
The SellerSheet plugin adds the skills **and** the MCP server in one step — see [Install the skills](/docs/start/skills). The steps below set up the server by hand.
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
## Step 2: Add SellerSheet in Claude Code [#step-2-add-sellersheet-in-claude-code]
Add the server:
```bash
claude mcp add --transport http sellersheet https://sellersheetai.com/mcp
```
**No browser on this machine?** Use an [API key](/docs/mcp-api/keys): keep it in an environment variable and reference it from `.mcp.json` — never paste the key on the command line.
```json title=".mcp.json"
{
"mcpServers": {
"sellersheet": {
"type": "http",
"url": "https://sellersheetai.com/mcp",
"headers": { "Authorization": "Bearer ${SELLERSHEET_API_KEY}" }
}
}
}
```
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. Start Claude Code and run `/mcp`, pick `sellersheet` and sign in in the browser.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### The browser never opens [#the-browser-never-opens]
Update the client — older versions don't support MCP sign-in — or use an [API key](/docs/mcp-api/keys).
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
### Tools time out [#tools-time-out]
Some Amazon reports take a minute or two. Raise your client's MCP tool timeout.
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# Claude desktop & claude.ai (https://sellersheetai.com/docs/start/clients/claude)
> Add SellerSheet to the Claude desktop app or claude.ai as a custom connector — browser sign-in, no key to copy.
Add SellerSheet to Claude as a custom connector — the same steps work in the desktop app and on claude.ai in the browser.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* A paid Claude plan — custom connectors need one.
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
## Step 2: Add SellerSheet in Claude [#step-2-add-sellersheet-in-claude]
1. Open **Settings → Connectors → Add custom connector**.
2. Name it `SellerSheet` and paste `https://sellersheetai.com/mcp` as the server URL.
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. Click **Connect**. Your browser opens the SellerSheet sign-in; approve, and you're back in Claude.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### The browser never opens [#the-browser-never-opens]
Update the client — older versions don't support MCP sign-in — or use an [API key](/docs/mcp-api/keys).
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# CodeBuddy (https://sellersheetai.com/docs/start/clients/codebuddy)
> Install the SellerSheet plugin in CodeBuddy Code — the same plugin as Claude Code — and sign in with /mcp.
CodeBuddy Code reads the same plugin as Claude Code: skills and server in one step.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* CodeBuddy Code installed.
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
You won't paste it here: the plugin carries the server.
## Step 2: Add SellerSheet in CodeBuddy [#step-2-add-sellersheet-in-codebuddy]
Inside a CodeBuddy session:
```text
/plugin marketplace add sellersheetai/sellersheet-skills
/plugin install sellersheet-skills@sellersheet-marketplace
```
Then `/reload-plugins`.
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. Sign in to `sellersheet` with `/mcp`.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### The browser never opens [#the-browser-never-opens]
Update the client — older versions don't support MCP sign-in — or use an [API key](/docs/mcp-api/keys).
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# Codex (https://sellersheetai.com/docs/start/clients/codex)
> Install the SellerSheet plugin in Codex, or add the MCP server by hand with codex mcp add — sign in with codex mcp login.
Add SellerSheet to Codex with the plugin (skills and server together) or by hand.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* The Codex CLI installed.
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
## Step 2: Add SellerSheet in Codex [#step-2-add-sellersheet-in-codex]
Plugin (skills and server together):
```bash
codex plugin marketplace add sellersheetai/sellersheet-skills
codex plugin add sellersheet-skills@sellersheet-marketplace
codex mcp login sellersheet
```
By hand:
```bash
codex mcp add sellersheet --url https://sellersheetai.com/mcp
codex mcp login sellersheet
```
With a key, `~/.codex/config.toml` takes `http_headers` (not `headers`):
```toml title="~/.codex/config.toml"
[mcp_servers.sellersheet]
url = "https://sellersheetai.com/mcp"
http_headers = { "Authorization" = "Bearer " }
```
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. `codex mcp login sellersheet` — the last command of either set above — signs you in in the browser.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### The browser never opens [#the-browser-never-opens]
Update the client — older versions don't support MCP sign-in — or use an [API key](/docs/mcp-api/keys).
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
### Tools time out [#tools-time-out]
Some Amazon reports take a minute or two. Raise your client's MCP tool timeout.
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# Coze 扣子 (https://sellersheetai.com/docs/start/clients/coze)
> Add SellerSheet to a Coze bot as an MCP tool, with an API key in the Authorization header.
Coze calls MCP servers from its own cloud, so it uses an [API key](/docs/mcp-api/keys), not a browser sign-in.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* A SellerSheet API key — [API keys](/docs/mcp-api/keys).
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
## Step 2: Add SellerSheet in Coze [#step-2-add-sellersheet-in-coze]
1. In your bot, open **Skills → MCP Tool → Add**.
2. Choose **Connect via URL** and enter `https://sellersheetai.com/mcp`.
3. Add the header `Authorization: Bearer `.
4. Save and publish the bot.
The same key-in-a-header pattern works for other hosted agent platforms.
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. There is no browser step: the key in the header is the sign-in.
2. In the bot, ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
### Tools time out [#tools-time-out]
Some Amazon reports take a minute or two. Raise your client's MCP tool timeout.
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# Cursor (https://sellersheetai.com/docs/start/clients/cursor)
> Add SellerSheet to Cursor as a global MCP server — in Cursor Settings or ~/.cursor/mcp.json — and sign in in the browser.
Add SellerSheet to Cursor once, globally or per project; the sign-in opens on the first tool call.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* Cursor installed.
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
## Step 2: Add SellerSheet in Cursor [#step-2-add-sellersheet-in-cursor]
**Cursor Settings → MCP → Add new global MCP server**, or edit `~/.cursor/mcp.json` (per project: `.cursor/mcp.json`):
```json title="~/.cursor/mcp.json"
{
"mcpServers": {
"sellersheet": { "url": "https://sellersheetai.com/mcp" }
}
}
```
With a key instead, add `"headers": { "Authorization": "Bearer " }` next to `url`.
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. The first time a chat uses a SellerSheet tool, Cursor opens the browser sign-in.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### The browser sign-in does not open [#the-browser-sign-in-does-not-open]
Click the refresh icon next to `sellersheet` in **Settings → MCP**. If it still does not open, update Cursor — older versions don't support MCP sign-in — or use an [API key](/docs/mcp-api/keys).
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
### Tools time out [#tools-time-out]
Some Amazon reports take a minute or two. Raise your client's MCP tool timeout.
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# Connect an AI client (https://sellersheetai.com/docs/start/clients)
> Add SellerSheet to the assistant you already use — one server URL, browser sign-in or an API key, the same tools in every client.
Your AI signs in to your SellerSheet account, sees only the stores you can see, and works through the same tools as the Google Sheets sidebar.
## What you need [#what-you-need]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* An AI client that speaks MCP over Streamable HTTP — every client below does.
| Setting | Value |
| ---------- | -------------------------------------------------------------------------------------- |
| Server URL | `https://sellersheetai.com/mcp` |
| Transport | Streamable HTTP |
| Sign-in | OAuth in the browser (no key to copy) — or an API key as `Authorization: Bearer ` |
The SellerSheet plugin adds the skills **and** the MCP server in one step — see [Install the skills](/docs/start/skills). The pages below are for setting it up by hand, and for every other client.
## Choose your client [#choose-your-client]
## Check it works [#check-it-works]
Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## How sign-in works [#how-sign-in-works]
Your sign-in identifies **you** to SellerSheet with Google or an email code — never with Amazon. SellerSheet already holds the Amazon authorization you gave when you [connected your store](/docs/start/connect). Each browser sign-in creates an MCP key under **Settings → API & MCP** in the app, named after the client; delete it there and that client stops working at once.
## If something's off [#if-somethings-off]
| Symptom | Fix |
| ----------------------- | --------------------------------------------------------------------------------- |
| "Unauthorized" (401) | Your sign-in or key expired or was deleted. Sign in again, or create a new key. |
| The browser never opens | Update the client — older versions don't support MCP sign-in — or use an API key. |
| "No stores" | Connect a store first: [Connect your store](/docs/start/connect). |
| Tools time out | Some Amazon reports take a minute or two. Raise your client's MCP tool timeout. |
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [call the same tools from code](/docs/mcp-api/code).
# Any MCP client (https://sellersheetai.com/docs/start/clients/other)
> Any client that speaks MCP over Streamable HTTP works — the URL, the transport, and the two ways to sign in.
Any client that speaks MCP over Streamable HTTP works.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* A client that speaks MCP over Streamable HTTP.
* For a headless client, an [API key](/docs/mcp-api/keys).
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
## Step 2: Add SellerSheet in your client [#step-2-add-sellersheet-in-your-client]
* **URL** `https://sellersheetai.com/mcp`, transport Streamable HTTP (`"type": "http"` or `"streamableHttp"` in most configs).
* **Interactive clients** sign in with OAuth 2.0 + PKCE: the server answers the first request with 401 and points the client at `/.well-known/oauth-authorization-server`; the client opens the browser.
* **Headless clients** send `Authorization: Bearer `.
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. Sign in in the browser when your client opens it — or, headless, send the key.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
Test a key from a terminal:
```bash
curl -sS https://sellersheetai.com/mcp \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
```
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### The browser never opens [#the-browser-never-opens]
Update the client — older versions don't support MCP sign-in — or use an [API key](/docs/mcp-api/keys).
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
### Tools time out [#tools-time-out]
Some Amazon reports take a minute or two. Raise your client's MCP tool timeout.
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# Windsurf (https://sellersheetai.com/docs/start/clients/windsurf)
> Add SellerSheet to Windsurf in mcp_config.json — serverUrl, not url — and sign in on the first tool call.
Add SellerSheet to Windsurf's MCP config; the sign-in opens on the first tool call.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* Windsurf installed.
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
## Step 2: Add SellerSheet in Windsurf [#step-2-add-sellersheet-in-windsurf]
Edit `~/.codeium/windsurf/mcp_config.json` (or **Windsurf Settings → MCP Servers → Add Server**). Windsurf uses `serverUrl`, not `url`:
```json title="mcp_config.json"
{
"mcpServers": {
"sellersheet": { "serverUrl": "https://sellersheetai.com/mcp" }
}
}
```
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. Restart Windsurf; the browser sign-in opens on the first SellerSheet tool call.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### The browser never opens [#the-browser-never-opens]
Update the client — older versions don't support MCP sign-in — or use an [API key](/docs/mcp-api/keys).
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# WorkBuddy (https://sellersheetai.com/docs/start/clients/workbuddy)
> Connect SellerSheet from WorkBuddy's connector marketplace — nothing to download, no command; the skills load with it.
WorkBuddy installs SellerSheet from its **connector marketplace** — nothing to download, no command.
## Prerequisites [#prerequisites]
* A SellerSheet account with a connected store — [Connect your store](/docs/start/connect).
* WorkBuddy 4.24 or newer.
## Step 1: Copy the SellerSheet MCP URL [#step-1-copy-the-sellersheet-mcp-url]
```text
https://sellersheetai.com/mcp
```
You won't paste it here: the SellerSheet connector in WorkBuddy's marketplace already points at it.
## Step 2: Add SellerSheet in WorkBuddy [#step-2-add-sellersheet-in-workbuddy]
1. Open **专家·技能·连接器 → 连接器**.
2. Find **SellerSheet** and click **连接**.
## Step 3: Sign in and test [#step-3-sign-in-and-test]
1. Sign in on sellersheetai.com in the browser and click **Authorize**. The connector shows 已连接, and the SellerSheet skills load with it.
2. Ask: "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as , with your plan and each store's status. Every session should start there.
## Troubleshooting [#troubleshooting]
### "Unauthorized" (401) [#unauthorized-401]
Your sign-in or key expired or was deleted. Sign in again, or create a new key.
### "No stores" [#no-stores]
Connect a store first: [Connect your store](/docs/start/connect).
### Tools time out [#tools-time-out]
Some Amazon reports take a minute or two. Raise your client's MCP tool timeout.
More in [Troubleshooting](/help/troubleshooting/ai). Next: [Install the skills](/docs/start/skills), or [try the prompt library](/docs/start/prompts).
# Connect your store (https://sellersheetai.com/docs/start/connect)
> Authorize your Amazon store once, choose which marketplaces sync, add Ads and noon — then every AI client you connect works on it.
You connect a store once, in the SellerSheet app. Every AI client, script and sheet you connect afterwards uses that connection — no Amazon sign-in inside your AI.
Amazon's own consent flow does the connecting. SellerSheet never sees your Seller Central password — only the API authorization for the permissions you approve, which you can revoke at any time in Seller Central → Manage Your Apps.
### Add the store [#add-the-store]
**Settings → Stores & Marketplaces → Add store.** Pick the region, the store type (Seller Central or Vendor Central) and the marketplaces, and give the store a name — 1–10 letters, digits or `_`. The name starts every store ref, so a store called `myStore` selling in the US becomes . Click **Authorize with Amazon**, sign in with the account that owns the store, and approve. You come back to the app with the store listed.
### Choose which marketplaces sync [#choose-which-marketplaces-sync]
Marketplaces are what your plan counts: it includes a number of active marketplaces, shared by your Amazon stores and noon accounts. Change them per store with **Edit markets** on the store's row. Only active marketplaces sync reports and answer your agent; a store with no active marketplace is **paused** — see [Store refs](/docs/mcp-api/store-refs#paused-stores).
### Authorize Ads (if you advertise) [#authorize-ads-if-you-advertise]
Amazon Advertising is a separate consent: use **Ads** on the store's row. Without it, the advertising tools and ad report syncs have nothing to work with — campaign questions come back empty, not broken.
### Add noon (optional) [#add-noon-optional]
**Add a noon account** connects a noon Partners project, with noon's own sign-in or the project's API key. noon refs follow the same shape, such as `myNoon-AE`, and noon marketplaces use the same plan quota.
### Let your agent write into Google Sheets [#let-your-agent-write-into-google-sheets]
Open any Google Sheet → **Extensions → SellerSheet → Open Sidebar** once. This sets up the Drive folders your agent reads and writes, and lets it write reports and dashboards into your sheets.
### Check from your AI [#check-from-your-ai]
Ask your agent "Which stores can you see?" It calls `get_user_context` and lists each store with its `store_refs`, its sync status and your plan. The first reports start syncing right after you connect; most tables have data within hours.
## What each account type gives your agent [#what-each-account-type-gives-your-agent]
| Account | APIs | What your agent can do |
| ----------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Seller Central | SP-API + Ads API | The whole tool catalog (more than tools) |
| Vendor Central | SP-API vendor surface | The common tools plus purchase orders, shipments and invoices — see [Vendor Central](/docs/mcp-api/workflows/vendor) |
| noon Partners | noon APIs | The noon tools plus synced noon reports — see [noon](/docs/mcp-api/workflows/noon) |
| A store shared with you | The owner's connection | What the owner granted you, per store |
## Common connection problems [#common-connection-problems]
| Symptom | Fix |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Authorization worked but the wrong store appears | You were signed into another Seller Central account in the browser. Remove the store, sign out of Amazon, add it again. |
| The store shows an authorization error later | The authorization was revoked or expired. Use **Reauthorize** on the store's row ([how](/help/app/settings/stores#reauthorize)); syncing resumes on its own. |
| Ad tools come back empty | Ads was never authorized for that store — **Ads** on the store's row. |
| Your agent can't write to your sheet | The workspace was never set up — open the sidebar once (step 5). |
| You can't add another store or marketplace | Your plan's marketplaces are all in use. Upgrade, or turn one off with **Edit markets**. |
# Get started (https://sellersheetai.com/docs/start)
> Connect your store, connect the AI you already use, and give it its first job.
SellerSheet gives your own AI — Claude, ChatGPT, Cursor, Coze or any MCP client — the tools to run your Amazon and noon stores through Amazon's official SP-API and Ads API. You bring the AI; SellerSheet provides the MCP server, the skills and the data: tools, skills, synced report tables and Google Sheets sidebar buttons.
## Your first hour [#your-first-hour]
Five things to have done by the end of it, each with where it happens.
1. **[Connect your store](/docs/start/connect)** · *Web app* — authorize Amazon (and Ads, and noon) once, then choose the marketplaces that sync.
2. **[Connect your AI](/docs/start/clients)** · *Your AI* — add SellerSheet to Claude, Cursor, Codex, Coze or any MCP client. On Claude Code, Codex and CodeBuddy the [plugin](/docs/start/skills) adds the skills in the same step.
3. **Ask a first question** · *Your AI → Google Sheets* — "Pull the last 7 days of orders for myStore-US into a sheet, totalled by SKU." Your AI reads, writes the sheet, and changes nothing on Amazon.
4. **Approve a first change** · *Your AI + Google Sheets* — let your AI stage a change in a sheet, check the rows, then say "submit the rows I changed". Nothing reaches Amazon before you say so, and only on a store you gave [write access](/docs/mcp-api/control).
5. **Get Amazon's changes in your team chat** · *Web app* — add a webhook in [Settings → Webhooks](/help/app/settings/webhooks): at most one card a minute in Feishu, Slack, Teams, WeCom or DingTalk, or signed JSON to your own system.
## Prompts to try [#prompts-to-try]
Copy one, swap in your own store, and send it to your AI. More in the [prompt library](/docs/start/prompts).
* "Pull the last 7 days of orders for myStore-US into a sheet, totalled by SKU — units and sales." `orders_searchOrders`
* "List every SKU with less than 30 days of sellable stock." `query_report_data`
* "Raise these keyword bids 10% toward the suggested bid — write them to the sheet first, I'll confirm before you submit." `ads_query_target` · `ads_update_target_bid`
* "Make a white-background main image of my product in the style of this competitor shot." `generate_image` changes nothing on Amazon. changes your Amazon account and needs write access on that store. is paid from your Credits balance, and refunded if it fails.
## Three ways to work [#three-ways-to-work]
One set of tools behind all three. Pick by the job:
* **Your AI** — ask in Claude, ChatGPT, Cursor or any MCP client; it calls SellerSheet's tools and reports back. For questions, analysis and jobs of many steps. [Connect an AI client →](/docs/start/clients)
* **Google Sheets sidebar** — click through a panel in your own spreadsheet: FBA shipments, ads, store reports. Your team edits rows in bulk and keeps the record. [How the sidebar works →](/help/sheets)
* **Web app** — your stores, team, billing and webhooks, plus Products, Studio and the catalogs. [Tour of the app →](/help/app)
## Every step in detail [#every-step-in-detail]
## Before your agent touches anything [#before-your-agent-touches-anything]
* [Store refs](/docs/mcp-api/store-refs) — how every call names a store and its marketplace.
* [Stay in control](/docs/mcp-api/control) — read, write and destructive labels, and write access per store.
* [Data we never see](/docs/start/privacy) — no buyer personal data, ever.
* [Credits & limits](/help/app/settings/billing) — what is paid, and what happens when a limit is reached.
* [Troubleshooting](/help/troubleshooting/ai) — every refusal, and its fix.
# Data we never see (https://sellersheetai.com/docs/start/privacy)
> SellerSheet holds no Amazon role for buyers' personal data — no names, no e-mail addresses, no street addresses, ever.
Amazon keeps buyers' personal information behind a separate, restricted role. **SellerSheet does not hold that role and does not ask for it.** So no tool — over MCP, the Tool API or the sidebar — can return a buyer's name, e-mail address, phone number or street address, and none of it is stored in your synced tables.
## What an order shows [#what-an-order-shows]
* Orders, items, quantities, prices, fees, taxes, promotions, fulfillment, packages and tracking — everything you need to run the order.
* Where it went, **at most**: the delivery **city, country and postal code** (the `RECIPIENT` selector of `orders_getOrder` and `orders_searchOrders`).
* **`BUYER` is not offered.** Amazon's selector for buyer details is left out of SellerSheet's order tools, so no agent can ask for it.
## What else SellerSheet never sees [#what-else-sellersheet-never-sees]
* **Your Seller Central password.** You connect a store through Amazon's own consent page; SellerSheet receives only the API authorization for the permissions you approve, and you can revoke it in Seller Central → Manage Your Apps.
* **Files outside your workspace.** Drive tools list and search only inside your SellerSheet workspace folders, and a file named by its id must be yours or shared with you.
## What your agent sees [#what-your-agent-sees]
Your AI client sees whatever its tools return to it — the data above, never more. What it does with that is between you and your AI provider: SellerSheet provides the MCP server, the AI is your own. See [Stay in control](/docs/mcp-api/control).
# Prompt library (https://sellersheetai.com/docs/start/prompts)
> Requests to copy into your agent — each with the tools it calls and whether it changes anything. Every prompt works in English and 中文.
Copy a request, swap in your own store and SKUs, and send it to your agent. Each one shows the tools it calls and its effect:
* changes nothing on Amazon — reading orders, stock, reports.
* changes your Amazon account — feeds, listings, shipments, ads. It needs write access on that store, or the call is refused.
* is paid from your Credits balance, and refunded automatically if it fails.
## How your agent works with SellerSheet [#how-your-agent-works-with-sellersheet]
* It starts with `get_user_context`, which returns your store refs (like ). Every later call names the store and its marketplace that way.
* Every result carries a message your agent passes on to you, and a note when something needs you personally.
* Results go into the Google Sheet you name, with headers, formats and filters. Edit it there, then say "submit the rows I changed".
## Orders & finance [#orders--finance]
* "Pull the last 7 days of orders for myStore-US into a sheet, totalled by SKU — units and sales." 把 myStore-US 最近 7 天的订单拉到表格里,按 SKU 汇总销量和销售额 `orders_searchOrders`
* "Which fees did Amazon take on order 112-3456789-0000000?" 订单 112-3456789-0000000 亚马逊到底扣了哪些费用? `finances_listFinancialEventsByOrderId`
* "What were revenue, refunds and FBA fees in the last settlement period?" 上一个结算周期的收入、退款、FBA 费用分别是多少? `finances_listFinancialEventGroups` · `finances_listFinancialEventsByGroupId`
* "Send a review request to these delivered orders." 给这批已送达订单发送 Request a Review `solicitations_getSolicitationActionsForOrder` · `solicitations_createProductReviewAndSellerFeedbackSolicitation`
## Listings [#listings]
* "Put the title, bullets and A+ status of these 20 ASINs side by side in a sheet." 把这 20 个 ASIN 的标题、五点、A+ 状态拉下来做一张对比表 `listings_fetch_attributes_by_asins` · `aplusContent_searchContentPublishRecords`
* "Push the prices and stock for these 50 SKUs from my sheet to Amazon." 帮我把表格里这 50 个 SKU 的价格和库存批量更新到亚马逊 `listings_submit_feed`
* "Can I sell this ASIN? Does it need approval?" 检查这个 ASIN 我能不能卖,需不需要审批 `listings_getListingsRestrictions`
* "Make a new-product sheet from this category's template — I fill it in, you submit." 按这个类目的模板生成新品上架表,我填完你提交 `listings_prepare_publish_queue_template` · `listings_submit_feed`
* "This listing fails with error 8541 — which attribute is wrong?" 这条 Listing 报错 8541,告诉我哪个属性不合规 `listings_getListingsItem`
## FBA & inventory [#fba--inventory]
* "List every SKU with less than 30 days of sellable stock." 列出所有可售库存低于 30 天的 SKU `query_report_data`
* "Build an FBA shipment from the box sizes in my sheet: packing, placement, confirm, then download the box labels." 用表格里的箱规建一个 FBA 货件:生成装箱方案、选仓、确认、下载箱标 `fbaInbound_orchestrate_packing` · `fbaInbound_listPlacementOptions` · `fbaInbound_confirm_plan_options` · `fbaInbound_get_labels`
* "Where is shipment FBA15XXXXXXX — received and shelved yet?" 查一下货件 FBA15XXXXXXX 的签收和上架进度 `fbaInbound_sync_shipment_status`
* "Ship one order to a non-Amazon customer from my FBA stock — estimate the cost first." 用 FBA 库存给非亚马逊客户发一单多渠道配送,先预估运费 `fbaOutbound_getFulfillmentPreview` · `fbaOutbound_createFulfillmentOrder`
## Ads · SP / SB / SD [#ads--sp--sb--sd]
* "List SP campaigns with ACoS above 40%, with their keywords and bids." 列出 ACoS 高于 40% 的 SP 广告活动,把关键词和竞价拉出来 `query_report_data`
* "Raise these keyword bids 10% toward the suggested bid — write them to the sheet first, I'll confirm before you submit." 把表格里这批关键词竞价按建议价上调 10%,先写到表格我确认再提交 `ads_query_target` · `ads_update_target_bid`
* "From the last 30 days of search terms, find the converting ones I'm not targeting yet." 拉最近 30 天的搜索词报告,找出转化好但还没投的词 `query_report_data`
* "Add a batch of negative keywords to this ad group." 给这个广告组补一批否定关键词 `ads_create_target`
* "Which campaigns ran out of budget this week?" 这周广告预算用完的活动有哪些? `ads_campaigns_budget_usage`
## Pricing & fees [#pricing--fees]
* "What are the Buy Box and lowest prices for these 20 ASINs right now?" 这 20 个 ASIN 现在的 Buy Box 价格和最低价是多少? `productPricing_getCompetitiveSummary`
* "If I price this SKU at 29.99, what are the referral and FBA fees, and my net margin?" 如果把这个 SKU 定价 29.99,亚马逊佣金和 FBA 费各多少,净利率多少? `productFees_getMyFeesEstimateForSKU`
* "Roughly what price would win the Featured Offer?" 拿到 Featured Offer 大概要定到什么价? `productPricing_getFeaturedOfferExpectedPriceBatch`
## Reports & synced data [#reports--synced-data]
* "From the synced inventory reports, find stock that hasn't sold in over 90 days." 查已同步的库存健康报表,找出滞销超过 90 天的库存 `query_report_data`
* "Pull the Brand Analytics search query performance report — what's my click share on these terms?" 拉品牌分析的搜索查询表现报告,看我的 ASIN 在这些词上的点击份额 `reports_createReport` · `reports_getReport`
* "Request a Sales & Traffic report, wait until it's ready, then write it into my sheet." 帮我申请一份 Sales & Traffic 报告并等它生成后写入表格 `reports_createReport` · `reports_getReport`
* "Total sales and sessions by week for the last 3 months, as a trend table." 按周汇总最近 3 个月的销量和会话数,做一张趋势表 `query_report_data`
## Reviews & buyers [#reviews--buyers]
* "What are the 10 things buyers praise and complain about most on this ASIN?" 这个 ASIN 买家最常夸的和最常抱怨的 10 个点是什么? `customerFeedback_getItemReviewTopics`
* "How have return reasons in this category trended over 6 months?" 这个类目最近 6 个月的退货原因趋势 `customerFeedback_getBrowseNodeReturnTrends`
* "Write a buyer-insights report for B0XXXXXXXX to guide my copy and images." 给 B0XXXXXXXX 生成一份买家洞察报告,指导我改文案和图片 `customerFeedback_insights_report`
## Images & A+ [#images--a]
* "Make a white-background main image of my product in the style of this competitor shot." 参考这张竞品图的风格,给我的产品生成一张白底主图 `generate_image`
* "Swap my product into this picture and keep the scene." 把这张图里的产品换成我的,场景保留 `edit_image`
* "Recolor this variation family into 5 secondary images." 给这个变体系列改色出 5 张副图 `edit_image`
* "Create the A+ page from the content in my sheet and submit it." 按表格里的内容创建 A+ 页面并提交发布 `aplusContent_create_and_publish`
## Working in Google Sheets [#working-in-google-sheets]
* "Write the results into my sheet, with headers, formats and a filter." 把结果写进我的表格,加上表头、格式和筛选 `write_sheet` · `format_sheet_range` · `set_sheet_basic_filter`
* "Submit the rows I changed to Amazon." 把我改过的行提交到亚马逊 `read_sheet` · `listings_submit_feed`
## Want one of these inside your own tools? [#want-one-of-these-inside-your-own-tools]
Ask your agent to build it on the [Tool API](/docs/mcp-api/code) — a dashboard, a listing tool, an approval page whose buttons act on Amazon. It calls the same tools with the same arguments, so it behaves exactly as it does in chat. Every job, step by step: [Workflows](/docs/mcp-api/workflows).
# Quick start (https://sellersheetai.com/docs/start/quickstart)
> From no account to your agent's first answer about your store — about five minutes, no code.
### Start free [#start-free]
Sign in at [sellersheetai.com](https://sellersheetai.com/login) with Google (afterwards Google or an email code both work). Every new account starts on the Free plan.
### Connect your store [#connect-your-store]
In the app, open **Settings → Stores & Marketplaces → Add store**, pick the region and the marketplaces, name the store and click **Authorize with Amazon**. Amazon's own consent page does the rest. Authorize Ads on the store's row too if you run ads. Details: [Connect your store](/docs/start/connect).
### Connect your AI client [#connect-your-ai-client]
Add one server to the AI you already use:
```text
https://sellersheetai.com/mcp
```
It speaks Streamable HTTP and signs in with OAuth — your browser opens, you approve, done. On Claude Code, Codex or CodeBuddy, install the SellerSheet plugin instead: it adds the server **and** the skills in one step. Every client: [Connect an AI client](/docs/start/clients).
### Ask [#ask]
Start with "Which stores can you see?" Your agent calls `get_user_context` and lists your store refs, such as . Then give it a real job:
* "Show me all my active listings in myStore-US."
* "What were my total sales last month?"
* "Check the Buy Box price for B0EXAMPLE1."
* "Which SKUs will run out of FBA stock within 21 days?"
More in the [prompt library](/docs/start/prompts).
## What happens behind the scenes [#what-happens-behind-the-scenes]
* **Amazon's official APIs.** Your agent calls SellerSheet's tools; SellerSheet calls Amazon's Selling Partner API (listings, orders, FBA, catalog, pricing, finances, reports) and Ads API (Sponsored Products, Brands and Display) with the authorization you gave. You never paste an Amazon password anywhere.
* **Reports are already synced.** SellerSheet keeps your Amazon reports in synced tables, so "how did last month do?" is answered in seconds. See the [Data](/docs/data) tab.
* **Your sheet is the review surface.** Your agent writes results into the Google Sheet you name; you edit there and say "submit the rows I changed".
* **Changes need your permission.** Reading works with read access; anything that changes Amazon needs write access on that store. See [Stay in control](/docs/mcp-api/control).
## Next [#next]
* [Install the skills](/docs/start/skills) — your agent learns SellerSheet's best practice for sheets, dashboards, reports, FBA, Ads and images.
* [Workflows](/docs/mcp-api/workflows) — one page per job, FBA first.
# Install the skills (https://sellersheetai.com/docs/start/skills)
> Skills teach your agent SellerSheet's best practice — the plugin installs them and the MCP server in one step.
The MCP server gives your agent the tools. **Skills** teach it how to use them well: how to build a sheet, run an FBA shipment, query the synced reports, manage Ads, write a Data Kiosk query or make listing images. SellerSheet publishes of them, installed as one bundle — see the [skills catalog](/docs/skills).
## Claude Code — the plugin [#claude-code--the-plugin]
```text
/plugin marketplace add sellersheetai/sellersheet-skills
/plugin install sellersheet-skills@sellersheet-marketplace
```
This installs the whole skill bundle **and** registers the SellerSheet MCP server. Sign in once: run `/mcp`, pick `sellersheet` and approve in the browser — no API key.
## Codex — the same plugin [#codex--the-same-plugin]
```bash
codex plugin marketplace add sellersheetai/sellersheet-skills
codex plugin add sellersheet-skills@sellersheet-marketplace
codex mcp login sellersheet
```
## CodeBuddy — the same plugin [#codebuddy--the-same-plugin]
Inside a CodeBuddy session:
```text
/plugin marketplace add sellersheetai/sellersheet-skills
/plugin install sellersheet-skills@sellersheet-marketplace
```
Then `/reload-plugins`, and sign in with `/mcp`. Skills appear namespaced, such as `/sellersheet-skills:report-data`.
## WorkBuddy — the connector [#workbuddy--the-connector]
Connecting SellerSheet from WorkBuddy's connector marketplace loads the same skills with it — see [Connect an AI client](/docs/start/clients/workbuddy).
## Claude Desktop [#claude-desktop]
Register the server under **Settings → Connectors** ([steps](/docs/start/clients/claude)), then install the skills:
```bash
bash <(curl -fsSL https://raw.githubusercontent.com/sellersheetai/sellersheet-skills/main/install.sh) --target claude-desktop
```
## Cursor, Gemini CLI and other agents [#cursor-gemini-cli-and-other-agents]
The open `npx skills` installer works across most coding agents:
```bash
npx skills add sellersheetai/sellersheet-skills # the whole bundle
npx skills add sellersheetai/sellersheet-skills --list # preview first
npx skills add sellersheetai/sellersheet-skills -a codex # one specific agent
npx skills add sellersheetai/sellersheet-skills -g # user level instead of per project
```
No Node.js? Use the install script with `--target `, or clone the repository and copy its `skills/` folder into your agent's skills directory. Skills installed this way don't connect the server — add it as in [Connect an AI client](/docs/start/clients).
The skills always install together: they share one small companion skill with the common rules (how to start a session, store refs, how to read a result), so a partial install is not supported.
## Keep them up to date [#keep-them-up-to-date]
* **Claude Code / CodeBuddy:** run `/plugin`, open **Marketplaces**, select `sellersheet-marketplace` and choose **Enable auto-update** — third-party marketplaces don't update on their own until you do. Or update on demand: `/plugin marketplace update sellersheet-marketplace`, then `/plugin update sellersheet-skills`.
* **WorkBuddy:** it tells you when a new connector version is approved; update from the connector page.
* **Other agents:** re-run the installer with `--update` (or `--check` to compare).
## Check it [#check-it]
Ask: "Show me my SellerSheet user context." Your agent calls `get_user_context`, which also tells it whether its skills are current.
# Tool reference (https://sellersheetai.com/docs/mcp-api/tools)
> More than 400 tools — the same ones over MCP and the Tool API. Generated from what production serves.
## amazon_ads
- [ads_ad_export](https://sellersheetai.com/docs/mcp-api/tools/ads_ad_export) (read): Submit a bulk export of every product ad across Sponsored Products, Brands and Display — an asynchronous full snapshot in one file.
- [ads_ad_group_export](https://sellersheetai.com/docs/mcp-api/tools/ads_ad_group_export) (read): Submit a bulk export of every ad group across Sponsored Products, Brands and Display — an asynchronous full snapshot in one file.
- [ads_amc_turn_on](https://sellersheetai.com/docs/mcp-api/tools/ads_amc_turn_on) (write): Turn Amazon Marketing Cloud (AMC) on for this store's Ads account in one country: finds the advertiser's AMC instance — creating it the first time — and remembers it.
- [ads_apply_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_apply_recommendations) (destructive): Accept Amazon-generated Sponsored Products campaign recommendations — Amazon applies the proposed change to the campaign.
- [ads_associate_accounts](https://sellersheetai.com/docs/mcp-api/tools/ads_associate_accounts) (write): Link an advertising account to an Amazon Ads manager account.
- [ads_associate_optimization_rules_to_campaign](https://sellersheetai.com/docs/mcp-api/tools/ads_associate_optimization_rules_to_campaign) (destructive): Attach Sponsored Products bid optimization rules to a campaign — a rule changes nothing until it is associated.
- [ads_campaign_export](https://sellersheetai.com/docs/mcp-api/tools/ads_campaign_export) (read): Submit a bulk export of every campaign across Sponsored Products, Brands and Display — an asynchronous full snapshot in one file.
- [ads_campaigns_budget_usage](https://sellersheetai.com/docs/mcp-api/tools/ads_campaigns_budget_usage) (read): Real-time budget consumption for campaigns — how much of today's budget is already spent, so you can see which campaigns are about to stop serving.
- [ads_create_ad](https://sellersheetai.com/docs/mcp-api/tools/ads_create_ad) (write): Create ads (creatives) across ALL ad products via the unified Amazon Ads API v1.
- [ads_create_ad_association](https://sellersheetai.com/docs/mcp-api/tools/ads_create_ad_association) (write): Create ad<->ad-group associations via the unified Amazon Ads API v1 — an AMAZON_DSP resource (creative rotation across ad groups); sponsored-ads products embed the product link in
- [ads_create_ad_group](https://sellersheetai.com/docs/mcp-api/tools/ads_create_ad_group) (write): Create ad groups across ALL ad products via the unified Amazon Ads API v1 (adProduct is a payload field; one shape for SP/SB/SD/ST/DSP).
- [ads_create_ads_account](https://sellersheetai.com/docs/mcp-api/tools/ads_create_ads_account) (write): Register a new Amazon Ads account.
- [ads_create_associated_budget_rules_for_campaigns](https://sellersheetai.com/docs/mcp-api/tools/ads_create_associated_budget_rules_for_campaigns) (destructive): Attach budget rules to one campaign.
- [ads_create_async_report](https://sellersheetai.com/docs/mcp-api/tools/ads_create_async_report) (read): Request an Amazon Advertising performance report (async — not immediately available; poll with ads_get_async_report until status=COMPLETED, then read data.report rows).
- [ads_create_budget_rules_for_campaigns](https://sellersheetai.com/docs/mcp-api/tools/ads_create_budget_rules_for_campaigns) (write): Create budget rules — automatic, time- or performance-based daily-budget increases.
- [ads_create_campaign](https://sellersheetai.com/docs/mcp-api/tools/ads_create_campaign) (write): Create advertising campaigns across ALL ad products via the unified Amazon Ads API v1 common model — one shape for Sponsored Products, Brands, Display, Television and Amazon DSP; t
- [ads_create_lookalike_audience](https://sellersheetai.com/docs/mcp-api/tools/ads_create_lookalike_audience) (write): Create an AMC lookalike audience: Amazon models shoppers similar to a seed the AMC query selects (for example the store's ad clickers) and activates them in the store's sponsored-a
- [ads_create_manager_account](https://sellersheetai.com/docs/mcp-api/tools/ads_create_manager_account) (write): Create an Amazon Ads manager account.
- [ads_create_optimization_rule](https://sellersheetai.com/docs/mcp-api/tools/ads_create_optimization_rule) (destructive): Sponsored Products rule-based bidding — hand bid control to Amazon under a ROAS guardrail you declare; Amazon raises and lowers the campaign's base bids itself to increase conversi
- [ads_create_portfolio](https://sellersheetai.com/docs/mcp-api/tools/ads_create_portfolio) (write): Create portfolios (cross-product: Sponsored Products, Brands and Display).
- [ads_create_query_based_audience](https://sellersheetai.com/docs/mcp-api/tools/ads_create_query_based_audience) (write): Create an AMC rule-based audience: the shoppers an AMC query selects become an audience in the store's sponsored-ads account — a Sponsored Products / Brands bid adjustment (bidAdju
- [ads_create_schedule](https://sellersheetai.com/docs/mcp-api/tools/ads_create_schedule) (write): Run a saved AMC workflow on a schedule — Daily or Weekly — on the store's instance.
- [ads_create_stream_subscription](https://sellersheetai.com/docs/mcp-api/tools/ads_create_stream_subscription) (write): Create an Amazon Marketing Stream subscription: Amazon pushes one dataset (dataSetId, from Amazon's Marketing Stream data guide) to an AWS SQS queue or Firehose stream the seller o
- [ads_create_target](https://sellersheetai.com/docs/mcp-api/tools/ads_create_target) (write): Create targets across ALL ad products via the unified Amazon Ads API v1 — keywords, product and category targets, audiences, themes and locations, and every negative (negative=true
- [ads_create_workflow](https://sellersheetai.com/docs/mcp-api/tools/ads_create_workflow) (write): Save an AMC query on the store's instance under an id of your choosing, so a schedule (ads_create_schedule) can run it every day or week.
- [ads_create_workflow_execution](https://sellersheetai.com/docs/mcp-api/tools/ads_create_workflow_execution) (read): Run an AMC SQL query over the store's AMC data (an ad-hoc execution).
- [ads_delete_ad](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_ad) (destructive): Delete (archive) ads (creatives) across ALL ad products via the unified Amazon Ads API v1.
- [ads_delete_ad_association](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_ad_association) (destructive): Delete (archive) ad<->ad-group associations via the unified Amazon Ads API v1 — an AMAZON_DSP resource (creative rotation across ad groups); sponsored-ads products embed the produc
- [ads_delete_ad_group](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_ad_group) (destructive): Delete (archive) ad groups across ALL ad products via the unified Amazon Ads API v1 (adProduct is a payload field; one shape for SP/SB/SD/ST/DSP).
- [ads_delete_campaign](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_campaign) (destructive): Delete (archive) advertising campaigns across ALL ad products via the unified Amazon Ads API v1 common model — one shape for Sponsored Products, Brands, Display, Television and Ama
- [ads_delete_campaign_optimization_rule](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_campaign_optimization_rule) (destructive): Sponsored Products: delete a rule-based-bidding rule — unlike ads_sp_update_optimization_rules's API (which has no delete), this one really does support delete; the campaign return
- [ads_delete_query_based_audience_by_audience_execution_id](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_query_based_audience_by_audience_execution_id) (destructive): Delete an AMC audience (FAILED or SUCCEEDED) and its segment in the sponsored-ads account.
- [ads_delete_schedule](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_schedule) (destructive): Delete an AMC schedule from the store's instance; its workflow stays saved.
- [ads_delete_target](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_target) (destructive): Delete (archive) targets across ALL ad products via the unified Amazon Ads API v1 — keywords, product and category targets, audiences, themes and locations, and every negative (neg
- [ads_delete_workflow](https://sellersheetai.com/docs/mcp-api/tools/ads_delete_workflow) (destructive): Delete a saved AMC query from the store's instance.
- [ads_disassociate_accounts](https://sellersheetai.com/docs/mcp-api/tools/ads_disassociate_accounts) (destructive): Unlink an advertising account from an Amazon Ads manager account — the manager loses access to that account.
- [ads_disassociate_associated_budget_rule_for_campaigns](https://sellersheetai.com/docs/mcp-api/tools/ads_disassociate_associated_budget_rule_for_campaigns) (destructive): Detach one budget rule from one campaign.
- [ads_dsp_advertisers](https://sellersheetai.com/docs/mcp-api/tools/ads_dsp_advertisers) (read): List Amazon DSP advertisers accessible to this profile — the `advertiserId` a DSP report needs in its `filters` (e.g.
- [ads_generate_brand_metrics_report](https://sellersheetai.com/docs/mcp-api/tools/ads_generate_brand_metrics_report) (read): Request a Brand Metrics report — your brand's shopper-funnel metrics in a category against category peers (engaged-shopper rate, customer conversion rate, new-to-brand customer rat
- [ads_get_ads_account](https://sellersheetai.com/docs/mcp-api/tools/ads_get_ads_account) (read): Get one Amazon Ads account by id.
- [ads_get_all_query_based_audiences_by_instance_id](https://sellersheetai.com/docs/mcp-api/tools/ads_get_all_query_based_audiences_by_instance_id) (read): List the AMC audiences of the store's instance — rule-based and lookalike, made by these tools or in the AMC console — with their status and size.
- [ads_get_asin_engagement_for_store](https://sellersheetai.com/docs/mcp-api/tools/ads_get_asin_engagement_for_store) (read): Per-ASIN engagement on a brand's Store pages (renders, views, clicks, add-to-carts, orders, in-stock rate), or a store-level TOTAL_VIEWS / TOTAL_CLICKS row.
- [ads_get_async_report](https://sellersheetai.com/docs/mcp-api/tools/ads_get_async_report) (read): Poll an Amazon Advertising report's status; auto-downloads and returns the rows in data.report once status=COMPLETED.
- [ads_get_bids_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_get_bids_recommendations) (read): Sponsored Brands: suggested bids for keywords, product targets or themes.
- [ads_get_brand_metrics_report](https://sellersheetai.com/docs/mcp-api/tools/ads_get_brand_metrics_report) (read): Poll a Brand Metrics report; when the server sees it finished, the same call also downloads the file, so there is no separate download step.
- [ads_get_brands](https://sellersheetai.com/docs/mcp-api/tools/ads_get_brands) (read): Sponsored Brands: list the brands registered under this advertiser profile — brandId, brandRegistryName and (sellers only) the brandEntityId the Store insights tools take (ads_get_
- [ads_get_budget_recommendation](https://sellersheetai.com/docs/mcp-api/tools/ads_get_budget_recommendation) (read): Sponsored Products: a daily-budget suggestion for a new campaign, before it exists.
- [ads_get_budget_rule_by_rule_id_for_campaigns](https://sellersheetai.com/docs/mcp-api/tools/ads_get_budget_rule_by_rule_id_for_campaigns) (read): Get one budget rule by id.
- [ads_get_budget_rules_for_advertiser](https://sellersheetai.com/docs/mcp-api/tools/ads_get_budget_rules_for_advertiser) (read): Page all of the advertiser's budget rules for one ad product.
- [ads_get_budget_rules_recommendation](https://sellersheetai.com/docs/mcp-api/tools/ads_get_budget_rules_recommendation) (read): Special-event budget-rule recommendations for one EXISTING campaign — Amazon's list of upcoming shopping events (Prime Day etc.) with a suggested budget-increase percent for this c
- [ads_get_campaign_optimization_rule](https://sellersheetai.com/docs/mcp-api/tools/ads_get_campaign_optimization_rule) (read): Sponsored Products: get one rule-based-bidding rule by its id.
- [ads_get_campaigns_associated_with_budget_rule](https://sellersheetai.com/docs/mcp-api/tools/ads_get_campaigns_associated_with_budget_rule) (read): List the campaigns a budget rule is attached to.
- [ads_get_campaigns_validation_configs](https://sellersheetai.com/docs/mcp-api/tools/ads_get_campaigns_validation_configs) (read): Validation rules Amazon enforces on campaign create/update — allowed values, ranges, and required fields, before building a payload.
- [ads_get_category_recommendations_for_asins](https://sellersheetai.com/docs/mcp-api/tools/ads_get_category_recommendations_for_asins) (read): Sponsored Products: category targets recommended for a list of ASINs — the coarse half of SP product targeting; narrow one further with ads_get_refinements_for_category.
- [ads_get_data_source](https://sellersheetai.com/docs/mcp-api/tools/ads_get_data_source) (read): One AMC table's columns, each with its type and privacy class — read it before writing SQL against a table you have not used.
- [ads_get_export](https://sellersheetai.com/docs/mcp-api/tools/ads_get_export) (read): Poll a bulk export submitted with ads_campaign_export / ads_ad_group_export / ads_target_export / ads_ad_export; downloads the file once status=COMPLETED.
- [ads_get_history](https://sellersheetai.com/docs/mcp-api/tools/ads_get_history) (read): Get the entity change history — an audit log of edits to campaigns, ad groups, keywords, targets and product ads.
- [ads_get_insights_for_store_api](https://sellersheetai.com/docs/mcp-api/tools/ads_get_insights_for_store_api) (read): Store traffic / sales / dwell / bounce insights for a brand's Store page.
- [ads_get_invoice](https://sellersheetai.com/docs/mcp-api/tools/ads_get_invoice) (read): Get one Amazon Ads invoice by id — invoice lines, payments, adjustments and tax detail.
- [ads_get_keyword_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_get_keyword_recommendations) (read): Sponsored Brands: suggested keywords, from ASINs or a landing page URL.
- [ads_get_localized_currencies](https://sellersheetai.com/docs/mcp-api/tools/ads_get_localized_currencies) (read): Convert amounts to a target marketplace's local currency — use before creating campaigns in a different marketplace than the store's primary one.
- [ads_get_localized_keywords](https://sellersheetai.com/docs/mcp-api/tools/ads_get_localized_keywords) (read): Translate keyword targeting between marketplaces.
- [ads_get_localized_products](https://sellersheetai.com/docs/mcp-api/tools/ads_get_localized_products) (read): Map products (ASIN or SKU) from the source marketplace to their equivalents in up to 10 target marketplaces — Sponsored Products only.
- [ads_get_localized_targeting_expression](https://sellersheetai.com/docs/mcp-api/tools/ads_get_localized_targeting_expression) (read): Translate targeting expressions between marketplaces.
- [ads_get_manager_accounts](https://sellersheetai.com/docs/mcp-api/tools/ads_get_manager_accounts) (read): List Amazon Ads manager accounts — an agency or brand's umbrella over several advertiser accounts.
- [ads_get_negative_brands](https://sellersheetai.com/docs/mcp-api/tools/ads_get_negative_brands) (read): Sponsored Products: brands Amazon recommends excluding from targeting (no input needed).
- [ads_get_optimization_rule_eligibility](https://sellersheetai.com/docs/mcp-api/tools/ads_get_optimization_rule_eligibility) (read): Sponsored Products: check which campaigns are eligible for rule-based bidding (a ROAS guardrail Amazon manages itself) before creating a rule with ads_create_optimization_rule — Am
- [ads_get_query_based_audience_by_audience_execution_id](https://sellersheetai.com/docs/mcp-api/tools/ads_get_query_based_audience_by_audience_execution_id) (read): One AMC audience's status — poll it after creating one.
- [ads_get_ranked_keyword_recommendation](https://sellersheetai.com/docs/mcp-api/tools/ads_get_ranked_keyword_recommendation) (read): Sponsored Products: ranked keyword recommendations with per-match-type suggested bids, from either an ad group or a list of ASINs.
- [ads_get_refinements_for_category](https://sellersheetai.com/docs/mcp-api/tools/ads_get_refinements_for_category) (read): Sponsored Products: the refinements (brand / age-range / genre facets) targetable WITHIN a category — e.g.
- [ads_get_rule_notification](https://sellersheetai.com/docs/mcp-api/tools/ads_get_rule_notification) (read): Sponsored Products: the daily health-check for a rule-based-bidding rule — whether Amazon has silently disabled it.
- [ads_get_schedule](https://sellersheetai.com/docs/mcp-api/tools/ads_get_schedule) (read): Read one AMC schedule on the store's instance: the workflow it runs, its period and whether it is enabled.
- [ads_get_sd_budget_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_get_sd_budget_recommendations) (read): Budget recommendations and missed-opportunity metrics for up to 100 Sponsored Display campaigns — suggestedBudget, and under sevenDaysMissedOpportunities the percentTimeInBudget (s
- [ads_get_stream_subscription](https://sellersheetai.com/docs/mcp-api/tools/ads_get_stream_subscription) (read): Get one Amazon Ads event stream subscription by id.
- [ads_get_target_bid_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_get_target_bid_recommendations) (read): Sponsored Display: bid recommendations for up to 100 targeting clauses, derived from the last 7 days of winning auction bids for each one.
- [ads_get_target_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_get_target_recommendations) (read): Sponsored Display: up to 100 recommended product, category, audience or content-category targets (whichever typeFilter asks for), based on the ASINs/SKUs you advertise.
- [ads_get_targeting_clauses_validation_configs](https://sellersheetai.com/docs/mcp-api/tools/ads_get_targeting_clauses_validation_configs) (read): Validation rules Amazon enforces on targeting-clause create — allowed expression types, ASIN/category id formats, bid constraints.
- [ads_get_theme_based_bid_recommendation_for_ad_group_v1](https://sellersheetai.com/docs/mcp-api/tools/ads_get_theme_based_bid_recommendation_for_ad_group_v1) (read): Sponsored Products: suggested bid amounts for keywords or targeting expressions, for an existing ad group or a new one.
- [ads_get_workflow](https://sellersheetai.com/docs/mcp-api/tools/ads_get_workflow) (read): Read one saved AMC query (workflow) on the store's instance: its SQL, parameters and output settings.
- [ads_get_workflow_execution](https://sellersheetai.com/docs/mcp-api/tools/ads_get_workflow_execution) (read): The status of an AMC query from ads_create_workflow_execution.
- [ads_get_workflow_execution_download_urls](https://sellersheetai.com/docs/mcp-api/tools/ads_get_workflow_execution_download_urls) (read): The finished result of an AMC query as rows: the tool downloads Amazon's result file and returns its rows (no download links).
- [ads_insights_get_audiences_overlapping_audiences](https://sellersheetai.com/docs/mcp-api/tools/ads_insights_get_audiences_overlapping_audiences) (read): Get the audiences that OVERLAP one given audience segment — audience-overlap insights for a single audienceId, not a catalog of audiences.
- [ads_list_ads_accounts](https://sellersheetai.com/docs/mcp-api/tools/ads_list_ads_accounts) (read): List the Amazon Ads accounts linked to this store's Ads credentials, each with its per-country profileId and entityId.
- [ads_list_assets](https://sellersheetai.com/docs/mcp-api/tools/ads_list_assets) (read): Sponsored Brands: list a brand's Stores asset library — logos, images, lifestyle imagery, video — every asset tied to the supplied entity id.
- [ads_list_associated_budget_rules_for_campaigns](https://sellersheetai.com/docs/mcp-api/tools/ads_list_associated_budget_rules_for_campaigns) (read): List the budget rules applied to one campaign.
- [ads_list_data_sources](https://sellersheetai.com/docs/mcp-api/tools/ads_list_data_sources) (read): List the AMC tables the store's instance can query — sponsored_ads_traffic, conversions, amazon_attributed_events_by_conversion_time and the rest — with their column counts.
- [ads_list_invoices](https://sellersheetai.com/docs/mcp-api/tools/ads_list_invoices) (read): List Amazon Ads billing invoices — billing period (fromDate/toDate), amount due, status and the document types available in the advertising console (INVOICE, CREDIT_NOTE), per invo
- [ads_list_portfolios](https://sellersheetai.com/docs/mcp-api/tools/ads_list_portfolios) (read): List portfolios (group campaigns across Sponsored Products, Brands and Display for shared budget caps and reporting).
- [ads_list_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_list_recommendations) (read): List Amazon-generated recommendations for SP, SB, SD and ST campaigns (budget, bid, bidding strategy, new keywords, new campaigns, …) — filter by AD_PRODUCT.
- [ads_list_schedules](https://sellersheetai.com/docs/mcp-api/tools/ads_list_schedules) (read): List the AMC schedules on the store's instance — each runs a saved workflow Daily or Weekly.
- [ads_list_stream_subscriptions](https://sellersheetai.com/docs/mcp-api/tools/ads_list_stream_subscriptions) (read): List Amazon Ads event stream subscriptions — real-time notifications of campaign state changes, budget events, etc.
- [ads_list_targetable_entities](https://sellersheetai.com/docs/mcp-api/tools/ads_list_targetable_entities) (read): List what a sponsored-ads campaign can target in the store's Ads account (Amazon's Discovery API).
- [ads_list_targetable_entity_paths](https://sellersheetai.com/docs/mcp-api/tools/ads_list_targetable_entity_paths) (read): List the taxonomy paths under which ads_list_targetable_entities finds entities (Amazon's Discovery API): the direct sub-paths of each path in paths_filter, or the top level.
- [ads_list_workflow_executions](https://sellersheetai.com/docs/mcp-api/tools/ads_list_workflow_executions) (read): List the AMC queries run on the store's instance — from these tools, the AMC console or a schedule — newest first, with their status.
- [ads_list_workflows](https://sellersheetai.com/docs/mcp-api/tools/ads_list_workflows) (read): List the saved AMC queries (workflows) on the store's instance: the seller's own, and SellerSheet's synced report templates (named in data.synced_ids — read-only here; their rows a
- [ads_portfolio_budget_usage](https://sellersheetai.com/docs/mcp-api/tools/ads_portfolio_budget_usage) (read): Real-time budget consumption for portfolios — how much of the portfolio's current budget cap (its date-range or monthly policy) is already spent; a portfolio with no budget cap com
- [ads_product_metadata](https://sellersheetai.com/docs/mcp-api/tools/ads_product_metadata) (read): Get SP product metadata for ASINs or SKUs — title, brand, category, image and advertising eligibility, to check before creating product ads.
- [ads_query_ad](https://sellersheetai.com/docs/mcp-api/tools/ads_query_ad) (read): Query (read) ads (creatives) across ALL ad products via the unified Amazon Ads API v1.
- [ads_query_ad_association](https://sellersheetai.com/docs/mcp-api/tools/ads_query_ad_association) (read): Query (read) ad<->ad-group associations via the unified Amazon Ads API v1 — an AMAZON_DSP resource (creative rotation across ad groups); sponsored-ads products embed the product li
- [ads_query_ad_group](https://sellersheetai.com/docs/mcp-api/tools/ads_query_ad_group) (read): Query (read) ad groups across ALL ad products via the unified Amazon Ads API v1 (adProduct is a payload field; one shape for SP/SB/SD/ST/DSP).
- [ads_query_campaign](https://sellersheetai.com/docs/mcp-api/tools/ads_query_campaign) (read): Query (read) advertising campaigns across ALL ad products via the unified Amazon Ads API v1 common model — one shape for Sponsored Products, Brands, Display, Television and Amazon
- [ads_query_target](https://sellersheetai.com/docs/mcp-api/tools/ads_query_target) (read): Query (read) targets across ALL ad products via the unified Amazon Ads API v1 — keywords, product and category targets, audiences, themes and locations, and every negative (negativ
- [ads_sb_get_budget_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_sb_get_budget_recommendations) (read): Daily-budget recommendations and missed-opportunity estimates for EXISTING Sponsored Brands campaigns (SP: ads_sp_get_budget_recommendations; a not-yet-created SP campaign: ads_get
- [ads_search_brands](https://sellersheetai.com/docs/mcp-api/tools/ads_search_brands) (read): Sponsored Products: search for a brand by name, to exclude it from targeting (negative brand target) — use this to find a specific named competitor.
- [ads_search_optimization_rules](https://sellersheetai.com/docs/mcp-api/tools/ads_search_optimization_rules) (read): Search Sponsored Products bid optimization rules — rules that raise bids on a SCHEDULE or, with apiVersion='v2', while a PERFORMANCE condition holds (ROAS, CVR, CTR, …).
- [ads_sp_bulk_create](https://sellersheetai.com/docs/mcp-api/tools/ads_sp_bulk_create) (write): Create complete Sponsored Products campaign structures in one call (Amazon Ads API v1) — campaign → ad groups → product ads → targets, with the created ids chained server-side.
- [ads_sp_create_optimization_rules](https://sellersheetai.com/docs/mcp-api/tools/ads_sp_create_optimization_rules) (write): Create a Sponsored Products bid optimization rule — schedule or performance bid rules that raise bids automatically.
- [ads_sp_get_all_rule_events](https://sellersheetai.com/docs/mcp-api/tools/ads_sp_get_all_rule_events) (read): Sponsored Products: list the special shopping events (Prime Day, Black Friday, …) with Amazon's suggested date range in this profile's marketplace.
- [ads_sp_get_budget_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_sp_get_budget_recommendations) (read): Sponsored Products: the recommended daily budget and missed opportunities for existing campaigns — campaigns that are budget-capped, losing impressions/clicks/sales because they ru
- [ads_sp_get_product_recommendations](https://sellersheetai.com/docs/mcp-api/tools/ads_sp_get_product_recommendations) (read): Sponsored Products: suggested target ASINs (product targets) for your advertised ASINs — competitor / complementary ASINs Amazon considers relevant, each with the themes that produ
- [ads_sp_update_optimization_rules](https://sellersheetai.com/docs/mcp-api/tools/ads_sp_update_optimization_rules) (destructive): Update a Sponsored Products bid optimization rule — Amazon replaces the rule, it does not merge, so send the FULL rule object(s) including optimizationRuleId.
- [ads_target_export](https://sellersheetai.com/docs/mcp-api/tools/ads_target_export) (read): Submit a bulk export of every targeting clause (keywords, product targets and all negatives) across Sponsored Products, Brands and Display — an asynchronous full snapshot in one fi
- [ads_update_ad](https://sellersheetai.com/docs/mcp-api/tools/ads_update_ad) (destructive): Update ads (creatives) across ALL ad products via the unified Amazon Ads API v1.
- [ads_update_ad_association](https://sellersheetai.com/docs/mcp-api/tools/ads_update_ad_association) (destructive): Update ad<->ad-group associations via the unified Amazon Ads API v1 — an AMAZON_DSP resource (creative rotation across ad groups); sponsored-ads products embed the product link in
- [ads_update_ad_group](https://sellersheetai.com/docs/mcp-api/tools/ads_update_ad_group) (destructive): Update ad groups across ALL ad products via the unified Amazon Ads API v1 (adProduct is a payload field; one shape for SP/SB/SD/ST/DSP).
- [ads_update_budget_rules_for_campaigns](https://sellersheetai.com/docs/mcp-api/tools/ads_update_budget_rules_for_campaigns) (destructive): Update existing budget rules — rename, change the increase, threshold or duration, or set ruleState PAUSED to stop one.
- [ads_update_campaign](https://sellersheetai.com/docs/mcp-api/tools/ads_update_campaign) (destructive): Update advertising campaigns across ALL ad products via the unified Amazon Ads API v1 common model — one shape for Sponsored Products, Brands, Display, Television and Amazon DSP; t
- [ads_update_campaign_budget](https://sellersheetai.com/docs/mcp-api/tools/ads_update_campaign_budget) (destructive): Change ONE campaign's budget amount — nothing else about the campaign.
- [ads_update_campaign_state](https://sellersheetai.com/docs/mcp-api/tools/ads_update_campaign_state) (destructive): Enable or pause ONE campaign — nothing else about it.
- [ads_update_optimization_rule](https://sellersheetai.com/docs/mcp-api/tools/ads_update_optimization_rule) (destructive): Sponsored Products: update a rule-based-bidding rule — same shape as ads_create_optimization_rule plus campaignOptimizationId.
- [ads_update_portfolio](https://sellersheetai.com/docs/mcp-api/tools/ads_update_portfolio) (destructive): Update portfolios (cross-product: Sponsored Products, Brands and Display).
- [ads_update_query_based_audience_by_audience_execution_id](https://sellersheetai.com/docs/mcp-api/tools/ads_update_query_based_audience_by_audience_execution_id) (destructive): Fix a FAILED AMC audience and run it again — Amazon accepts an update on a FAILED audience only; a working one cannot be changed (create a new one).
- [ads_update_recommendation](https://sellersheetai.com/docs/mcp-api/tools/ads_update_recommendation) (destructive): Modify one Amazon-generated Sponsored Products campaign recommendation before accepting it.
- [ads_update_schedule](https://sellersheetai.com/docs/mcp-api/tools/ads_update_schedule) (destructive): Replace an AMC schedule on the store's instance — e.g.
- [ads_update_stream_subscription](https://sellersheetai.com/docs/mcp-api/tools/ads_update_stream_subscription) (destructive): Archive an Amazon Ads event stream subscription — Amazon has no enable/disable for this resource, only ARCHIVED.
- [ads_update_target](https://sellersheetai.com/docs/mcp-api/tools/ads_update_target) (destructive): Update targets across ALL ad products via the unified Amazon Ads API v1 — keywords, product and category targets, audiences, themes and locations, and every negative (negative=true
- [ads_update_target_bid](https://sellersheetai.com/docs/mcp-api/tools/ads_update_target_bid) (destructive): Change ONE target's (keyword, product or audience target) bid.
- [ads_update_workflow](https://sellersheetai.com/docs/mcp-api/tools/ads_update_workflow) (destructive): Replace a saved AMC query on the store's instance.
- [ads_update_workflow_execution](https://sellersheetai.com/docs/mcp-api/tools/ads_update_workflow_execution) (read): Cancel an AMC query that is still PENDING or RUNNING — Amazon's UpdateWorkflowExecution, whose one documented change is the status CANCELLED.
## amazon_sp
- [aplusContent_create_and_publish](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_create_and_publish) (destructive): Full A+ pipeline in one call: upload the images → create the content document → link the ASINs → submit for approval.
- [aplusContent_getContentDocument](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_getContentDocument) (read): Get an A+ Content document.
- [aplusContent_listContentDocumentAsinRelations](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_listContentDocumentAsinRelations) (read): List the ASINs currently linked to a specific A+ Content document.
- [aplusContent_list_documents_detailed](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_list_documents_detailed) (read): Up to 50 A+ Content documents per call (5 pages × 10 records), each enriched with its full contentDocument JSON and linked ASINs — sheet-ready rows for the "List A+" tab.
- [aplusContent_postContentDocumentApprovalSubmission](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_postContentDocumentApprovalSubmission) (destructive): Submit an A+ document for Amazon review and publication — after aplusContent_create_and_publish ran with submitForApproval false, or to retry its failed submit step.
- [aplusContent_postContentDocumentAsinRelations](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_postContentDocumentAsinRelations) (destructive): Replace all ASINs linked to an existing A+ content document.
- [aplusContent_postContentDocumentSuspendSubmission](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_postContentDocumentSuspendSubmission) (destructive): Suspend live (APPROVED) A+ content: it leaves every linked ASIN's detail page while the document and its ASIN links stay.
- [aplusContent_searchContentDocuments](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_searchContentDocuments) (read): Fetch one metadata page of A+ Content documents — lightweight, no enrichment.
- [aplusContent_searchContentPublishRecords](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_searchContentPublishRecords) (read): Check if an ASIN already has published (live) A+ Content on Amazon.
- [aplusContent_updateContentDocument](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_updateContentDocument) (destructive): Replace the content of an existing A+ document, keeping its key and ASIN links — to revise copy, module order or images without creating a new document.
- [aplusContent_validateContentDocumentAsinRelations](https://sellersheetai.com/docs/mcp-api/tools/aplusContent_validateContentDocumentAsinRelations) (read): Validate ASINs against an A+ content document before linking — no changes made (read-only).
- [catalogItems_getCatalogItem](https://sellersheetai.com/docs/mcp-api/tools/catalogItems_getCatalogItem) (read): Get Amazon's LIVE catalog data for a single ASIN — the reconciled version that shoppers see on the detail page.
- [catalogItems_searchCatalogItems](https://sellersheetai.com/docs/mcp-api/tools/catalogItems_searchCatalogItems) (read): Search Amazon's live catalog by keywords or by identifiers — what shoppers see, not one seller's submission.
- [customerFeedback_getBrowseNodeReturnTopics](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_getBrowseNodeReturnTopics) (read): The top 10 reasons customers give when returning products in a browse node, each with its share of the category's returns (US, UK, FR, IT, DE, ES, JP only) — use them to set accura
- [customerFeedback_getBrowseNodeReturnTrends](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_getBrowseNodeReturnTrends) (read): Month-by-month share of the category's returns that cite each return reason (past 6 months, newest first) for a browse node (US, UK, FR, IT, DE, ES, JP only) — whether a reason is
- [customerFeedback_getBrowseNodeReviewTopics](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_getBrowseNodeReviewTopics) (read): The 10 most positive and 10 most negative review topics of a whole browse node (US, UK, FR, IT, DE, ES, JP only).
- [customerFeedback_getBrowseNodeReviewTrends](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_getBrowseNodeReviewTrends) (read): Month-by-month occurrence trends (past 6 months, newest first) of a browse node's top review topics — the category baseline for customerFeedback_getItemReviewTrends (US, UK, FR, IT
- [customerFeedback_getItemBrowseNode](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_getItemBrowseNode) (read): Get the browse node (category) ID for a specific ASIN.
- [customerFeedback_getItemReviewTopics](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_getItemReviewTopics) (read): The 10 most positive and 10 most negative review topics of one ASIN (US, UK, FR, IT, DE, ES, JP only), each with review snippets, occurrence %, star-rating impact and the browse-no
- [customerFeedback_getItemReviewTrends](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_getItemReviewTrends) (read): Month-by-month occurrence trends (past 6 months, newest first) of one ASIN's 10 most positive and 10 most negative review topics, beside the category's — to see whether a fix impro
- [customerFeedback_insights_report](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_insights_report) (write): Buyer insights report for ONE ASIN — what buyers of this CATEGORY praise, complain about and return, turned into the questions to answer before writing listing copy.
- [dataKiosk_cancelQuery](https://sellersheetai.com/docs/mcp-api/tools/dataKiosk_cancelQuery) (read): Cancel a Data Kiosk query that is IN_QUEUE or IN_PROGRESS.
- [dataKiosk_createQuery](https://sellersheetai.com/docs/mcp-api/tools/dataKiosk_createQuery) (read): Submit a Data Kiosk GraphQL query; returns queryId at once.
- [dataKiosk_getDocument](https://sellersheetai.com/docs/mcp-api/tools/dataKiosk_getDocument) (read): Fetch a Data Kiosk document by document ID.
- [dataKiosk_getQueries](https://sellersheetai.com/docs/mcp-api/tools/dataKiosk_getQueries) (read): List Data Kiosk queries for this store with optional filters.
- [dataKiosk_getQuery](https://sellersheetai.com/docs/mcp-api/tools/dataKiosk_getQuery) (read): Poll Data Kiosk query status.
- [fbaInboundEligibility_getItemEligibilityPreview](https://sellersheetai.com/docs/mcp-api/tools/fbaInboundEligibility_getItemEligibilityPreview) (read): Check whether an ASIN is eligible for FBA inbound (or commingling) (read).
- [fbaInbound_cancelInboundPlan](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_cancelInboundPlan) (destructive): Cancel an FBA inbound plan.
- [fbaInbound_cancelSelfShipAppointment](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_cancelSelfShipAppointment) (destructive): Cancel a self-ship appointment (write, async).
- [fbaInbound_confirmDeliveryWindowOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_confirmDeliveryWindowOptions) (destructive): Confirm a delivery window option for a shipment (write, async).
- [fbaInbound_confirmPackingOption](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_confirmPackingOption) (destructive): Confirm a packing option (Amazon write — irreversible for this plan).
- [fbaInbound_confirmPlacementOption](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_confirmPlacementOption) (destructive): Confirm one placement option of an inbound plan; the server waits until Amazon's operation finishes.
- [fbaInbound_confirmShipmentContentUpdatePreview](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_confirmShipmentContentUpdatePreview) (destructive): Confirm a content update preview, accepting the cost change (write, async).
- [fbaInbound_confirmTransportationOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_confirmTransportationOptions) (destructive): Confirm the chosen transportation option per shipment (write, async).
- [fbaInbound_confirm_plan_options](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_confirm_plan_options) (destructive): Confirm the human's placement option and, per shipment, the transport option (+ delivery window) in one call — after the human approved them from fbaInbound_generate_shipment_optio
- [fbaInbound_createInboundPlan](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_createInboundPlan) (write): Create an FBA inbound plan on Amazon (single-step).
- [fbaInbound_createMarketplaceItemLabels](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_createMarketplaceItemLabels) (write): Create FNSKU item labels for a list of MSKUs (write).
- [fbaInbound_create_packing_list](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_create_packing_list) (write): Packing list from Amazon's OWN box contents.
- [fbaInbound_generateDeliveryWindowOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_generateDeliveryWindowOptions) (write): Start generating delivery window options for one shipment (USE_YOUR_OWN_CARRIER).
- [fbaInbound_generatePackingOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_generatePackingOptions) (write): Start generating packing options for a plan (async).
- [fbaInbound_generatePlacementOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_generatePlacementOptions) (write): Start generating placement options for a plan (async).
- [fbaInbound_generateSelfShipAppointmentSlots](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_generateSelfShipAppointmentSlots) (write): Generate self-ship appointment slots for a shipment (write, async).
- [fbaInbound_generateShipmentContentUpdatePreviews](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_generateShipmentContentUpdatePreviews) (write): Generate content update previews for revised box content (write, async).
- [fbaInbound_generateTransportationOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_generateTransportationOptions) (write): Start generating transportation options for a placement option (async).
- [fbaInbound_generate_shipment_options](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_generate_shipment_options) (write): The transportation options + delivery windows for ONE placement option: the cheapest `limit` partnered options per shipping mode and, when named, one carrier type.
- [fbaInbound_getDeliveryChallanDocument](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_getDeliveryChallanDocument) (read): Fetch the delivery challan document of an India (IN) shipment that uses Amazon-partnered (PCP) transport (read).
- [fbaInbound_getInboundOperationStatus](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_getInboundOperationStatus) (read): Poll getInboundOperationStatus for a previously started async operation.
- [fbaInbound_getInboundPlan](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_getInboundPlan) (read): Fetch the raw inbound plan object from Amazon (read-only).
- [fbaInbound_getSelfShipAppointmentSlots](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_getSelfShipAppointmentSlots) (read): List available self-ship appointment slots (read, one page).
- [fbaInbound_getShipment](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_getShipment) (read): Fetch a single shipment object from Amazon (read).
- [fbaInbound_getShipmentContentUpdatePreview](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_getShipmentContentUpdatePreview) (read): Fetch a single content update preview (read).
- [fbaInbound_get_labels](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_get_labels) (write): Download the box-label PDF of a confirmed shipment (v0 getLabels): the server fetches Amazon's downloadURL, cuts the pages to the label size and returns the PDF base64.
- [fbaInbound_get_plan_status](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_get_plan_status) (read): List every placement option of an inbound plan (all pages) — a quick existence and stage probe before a phase.
- [fbaInbound_listDeliveryWindowOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listDeliveryWindowOptions) (read): List delivery window options for a shipment (after generate completed).
- [fbaInbound_listInboundPlanBoxes](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listInboundPlanBoxes) (read): List all boxes in an inbound plan (read, one page).
- [fbaInbound_listInboundPlanItems](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listInboundPlanItems) (read): List the items (msku/fnsku/quantity/prep) in an inbound plan (read, one page).
- [fbaInbound_listInboundPlanPallets](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listInboundPlanPallets) (read): List all pallets in an inbound plan (read, one page; LTL/FTL freight).
- [fbaInbound_listInboundPlans](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listInboundPlans) (read): List inbound plans for a store (one page per call).
- [fbaInbound_listItemComplianceDetails](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listItemComplianceDetails) (read): List inbound compliance (tax) details for MSKUs (read).
- [fbaInbound_listPackingGroupBoxes](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listPackingGroupBoxes) (read): List boxes in a packing group (read, one page; provided via setPackingInformation).
- [fbaInbound_listPackingGroupItems](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listPackingGroupItems) (read): List items in a packing group (read, one page; Box First).
- [fbaInbound_listPackingOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listPackingOptions) (read): List packing options after generatePackingOptions completed.
- [fbaInbound_listPlacementOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listPlacementOptions) (read): List placement options for a plan (read, one page).
- [fbaInbound_listPrepDetails](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listPrepDetails) (read): Get preparation details + owner constraints for MSKUs (read).
- [fbaInbound_listShipmentBoxes](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listShipmentBoxes) (read): List boxes in a shipment (read, one page).
- [fbaInbound_listShipmentContentUpdatePreviews](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listShipmentContentUpdatePreviews) (read): List content update previews in a shipment (read, one page).
- [fbaInbound_listShipmentItems](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listShipmentItems) (read): List item packages in a shipment (read, one page).
- [fbaInbound_listShipmentPallets](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listShipmentPallets) (read): List pallets in a shipment (read, one page; LTL/FTL freight).
- [fbaInbound_listTransportationOptions](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_listTransportationOptions) (read): List transportation options after generateTransportationOptions completed.
- [fbaInbound_orchestrate_packing](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_orchestrate_packing) (write): Create an FBA inbound plan through to PLACEMENT OPTIONS and stop: setPrepDetails → createInboundPlan → generate and confirm the packing option → setPackingInformation → generatePla
- [fbaInbound_scheduleSelfShipAppointment](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_scheduleSelfShipAppointment) (write): Book, or reschedule, a self-ship appointment on a chosen slot (write, synchronous).
- [fbaInbound_setPackingInformation](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_setPackingInformation) (destructive): Set box packing information per shipment/group (Amazon write, async).
- [fbaInbound_setPrepDetails](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_setPrepDetails) (destructive): Set preparation details (category + types) for MSKUs (write, async).
- [fbaInbound_sync_shipment_status](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_sync_shipment_status) (read): One shipment's current Amazon status plus a terminal flag — a cheap poll; for the full shipment object use fbaInbound_getShipment.
- [fbaInbound_updateInboundPlanName](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_updateInboundPlanName) (write): Rename an inbound plan (write, synchronous).
- [fbaInbound_updateItemComplianceDetails](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_updateItemComplianceDetails) (destructive): Update India (IN) compliance tax details for MSKUs (write, async).
- [fbaInbound_updateShipmentName](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_updateShipmentName) (write): Rename a shipment (write, synchronous).
- [fbaInbound_updateShipmentSourceAddress](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_updateShipmentSourceAddress) (destructive): Update a shipment's source address (write, async).
- [fbaInbound_updateShipmentTrackingDetails](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_updateShipmentTrackingDetails) (destructive): Upload carrier tracking for one shipment to Amazon.
- [fbaInventory_getInventorySummaries](https://sellersheetai.com/docs/mcp-api/tools/fbaInventory_getInventorySummaries) (read): Live FBA inventory for one or a few SKUs right now (read, one page) — e.g.
- [fbaOutbound_cancelFulfillmentOrder](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_cancelFulfillmentOrder) (destructive): Cancel an MCF fulfillment order.
- [fbaOutbound_createFulfillmentOrder](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_createFulfillmentOrder) (write): Create a Multi-Channel Fulfillment order — ships FBA inventory to a non-Amazon customer address.
- [fbaOutbound_createFulfillmentReturn](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_createFulfillmentReturn) (write): Create a return for a fulfilled MCF order.
- [fbaOutbound_deliveryOffers](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_deliveryOffers) (read): Get estimated delivery options (date + expiry) for a SKU to a destination.
- [fbaOutbound_getFeatureInventory](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_getFeatureInventory) (read): List inventory SKUs eligible for a given MCF feature.
- [fbaOutbound_getFeatureSKU](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_getFeatureSKU) (read): Get the count of one SKU eligible for a given MCF feature.
- [fbaOutbound_getFeatures](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_getFeatures) (read): List MCF features available in the store's marketplace + seller enrollment.
- [fbaOutbound_getFulfillmentOrder](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_getFulfillmentOrder) (read): Get one MCF fulfillment order with its items and shipments.
- [fbaOutbound_getFulfillmentPreview](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_getFulfillmentPreview) (read): Preview an MCF order's fees and fulfillability BEFORE creating it.
- [fbaOutbound_getPackageTrackingDetails](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_getPackageTrackingDetails) (read): Get delivery tracking details for one outbound MCF package.
- [fbaOutbound_listAllFulfillmentOrders](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_listAllFulfillmentOrders) (read): List MCF fulfillment orders.
- [fbaOutbound_listReturnReasonCodes](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_listReturnReasonCodes) (read): List valid return reason codes for a SKU (call before fbaOutbound_createFulfillmentReturn).
- [fbaOutbound_updateFulfillmentOrder](https://sellersheetai.com/docs/mcp-api/tools/fbaOutbound_updateFulfillmentOrder) (destructive): Update or request shipment for an MCF order that has an order hold.
- [feeds_cancelFeed](https://sellersheetai.com/docs/mcp-api/tools/feeds_cancelFeed) (destructive): Cancel a queued feed (cancelFeed).
- [feeds_createFeed](https://sellersheetai.com/docs/mcp-api/tools/feeds_createFeed) (destructive): Submit a feed to Amazon (createFeedDocument upload + createFeed); returns feedId at once.
- [feeds_getFeed](https://sellersheetai.com/docs/mcp-api/tools/feeds_getFeed) (read): Get Amazon feed processing status (getFeed).
- [feeds_getFeeds](https://sellersheetai.com/docs/mcp-api/tools/feeds_getFeeds) (read): List/filter your recent feeds (getFeeds).
- [finances_listFinancialEventGroups](https://sellersheetai.com/docs/mcp-api/tools/finances_listFinancialEventGroups) (read): List Amazon financial event groups (settlement periods).
- [finances_listFinancialEvents](https://sellersheetai.com/docs/mcp-api/tools/finances_listFinancialEvents) (read): List Amazon financial events (charges, credits, fees, etc.) by posted-date range.
- [finances_listFinancialEventsByGroupId](https://sellersheetai.com/docs/mcp-api/tools/finances_listFinancialEventsByGroupId) (read): List all financial events for a specific settlement group.
- [finances_listFinancialEventsByOrderId](https://sellersheetai.com/docs/mcp-api/tools/finances_listFinancialEventsByOrderId) (read): Get all financial events for a specific Amazon order ID.
- [finances_listTransactions](https://sellersheetai.com/docs/mcp-api/tools/finances_listTransactions) (read): List Amazon financial transactions by posted-date range.
- [listings_build_payload](https://sellersheetai.com/docs/mcp-api/tools/listings_build_payload) (read): Build Amazon-shaped attribute JSON from a Publish Queue row's flat cells, per SKU, driven by the productType schema.
- [listings_deleteListingsItem](https://sellersheetai.com/docs/mcp-api/tools/listings_deleteListingsItem) (destructive): Delete this seller's listing for a SKU (offer and submitted attributes); the ASIN's catalog page stays.
- [listings_fetch_attributes_by_asins](https://sellersheetai.com/docs/mcp-api/tools/listings_fetch_attributes_by_asins) (read): Bulk fetch + flatten Amazon catalog attributes for N ASINs in ONE call.
- [listings_fetch_attributes_by_skus](https://sellersheetai.com/docs/mcp-api/tools/listings_fetch_attributes_by_skus) (read): Bulk fetch + flatten Amazon listings attributes for N OWNED SKUs in ONE call.
- [listings_getListingsItem](https://sellersheetai.com/docs/mcp-api/tools/listings_getListingsItem) (read): Get the SELLER'S SUBMITTED attributes, status, and issues for a single listing SKU.
- [listings_getListingsRestrictions](https://sellersheetai.com/docs/mcp-api/tools/listings_getListingsRestrictions) (read): Check whether you are approved to sell an ASIN in a given condition.
- [listings_get_attribute_guide](https://sellersheetai.com/docs/mcp-api/tools/listings_get_attribute_guide) (read): The row-4 guide (format, unit, allowed values, example) for each Publish Queue column of a productType — one per flat-file key, so item_weight has one for #1.value and one for #1.u
- [listings_parse_asin_to_cells](https://sellersheetai.com/docs/mcp-api/tools/listings_parse_asin_to_cells) (read): Convenience: fetch an ASIN's catalog attributes from Amazon and return flat, operator-readable cell values.
- [listings_parse_payload](https://sellersheetai.com/docs/mcp-api/tools/listings_parse_payload) (read): Turn Amazon attribute JSON you already hold (from listings_getListingsItem or catalogItems_getCatalogItem) into Publish Queue cells keyed by Amazon's flat-file keys — the inverse o
- [listings_patchListingsItem](https://sellersheetai.com/docs/mcp-api/tools/listings_patchListingsItem) (destructive): Patch attributes on an existing listing (JSON Patch) without replacing it — the tool for fixing a suppressed listing or changing price, inventory, title or images.
- [listings_poll_feed_results](https://sellersheetai.com/docs/mcp-api/tools/listings_poll_feed_results) (write): Check the feeds behind the Submission Log's unfinished Submit Feed rows and get back the cells to write: Feed Status, Result, Issues, Raw Response.
- [listings_prepare_publish_queue_template](https://sellersheetai.com/docs/mcp-api/tools/listings_prepare_publish_queue_template) (read): Everything needed to seed a Publish Queue tab for N productTypes in one call: one bundle for a single productType, or ONE merged bundle keyed by the joined names ("TOWEL,HEADPHONES
- [listings_putListingsItem](https://sellersheetai.com/docs/mcp-api/tools/listings_putListingsItem) (destructive): Create a listing, or fully replace an existing one — PUT replaces every attribute, so for a targeted change use listings_patchListingsItem.
- [listings_searchListingsItems](https://sellersheetai.com/docs/mcp-api/tools/listings_searchListingsItems) (read): Search and filter the seller's own listings catalog — the entry point for a suppressed-listing audit (with_issue_severity ['ERROR'] and included_data ['summaries', 'issues'], then
- [listings_submit_feed](https://sellersheetai.com/docs/mcp-api/tools/listings_submit_feed) (destructive): Bulk publish through Amazon's Feeds API (JSON_LISTINGS_FEED) — the sidebar's "Submit Listing" parity, for 10+ SKUs up to ~25,000 per call; for interactive edits of ≤20 SKUs with pe
- [listings_submit_feed_legacy](https://sellersheetai.com/docs/mcp-api/tools/listings_submit_feed_legacy) (destructive): Legacy Create Listing flow: submit flat Create Listing rows via JSON_LISTINGS_FEED or the Listings Items API — new work uses listings_submit_feed (Publish Queue keys).
- [listings_submit_items](https://sellersheetai.com/docs/mcp-api/tools/listings_submit_items) (destructive): Build Amazon-shaped payloads from Publish Queue cells AND submit them per SKU through the listings-items API in one call — the same input shape as listings_build_payload, then one
- [listings_validate_rows](https://sellersheetai.com/docs/mcp-api/tools/listings_validate_rows) (write): Validate rows of the LEGACY Create Listing sheet (combined headers, config in rows 1–2) with Amazon's VALIDATION_PREVIEW.
- [orders_getOrder](https://sellersheetai.com/docs/mcp-api/tools/orders_getOrder) (read): Get one order (Orders v2026-01-01) with its line items inline (order.orderItems) and any included_data expansions.
- [orders_searchOrders](https://sellersheetai.com/docs/mcp-api/tools/orders_searchOrders) (read): Search orders (Orders v2026-01-01): ONE Amazon page plus data.nextToken, the full v2026 filter set, and line items INLINE on each order (order.orderItems) — no separate items call.
- [productFees_getMyFeesEstimateForASIN](https://sellersheetai.com/docs/mcp-api/tools/productFees_getMyFeesEstimateForASIN) (read): Estimate Amazon fees (referral fee + FBA/MFN fees) for a single ASIN at a given price.
- [productFees_getMyFeesEstimateForSKU](https://sellersheetai.com/docs/mcp-api/tools/productFees_getMyFeesEstimateForSKU) (read): Estimate Amazon fees (referral fee + FBA/MFN fees) for a seller SKU at a given price.
- [productFees_getMyFeesEstimates](https://sellersheetai.com/docs/mcp-api/tools/productFees_getMyFeesEstimates) (read): Amazon fee estimates for a batch of items in one request (Product Fees v0) — the batch form of productFees_getMyFeesEstimateForASIN and productFees_getMyFeesEstimateForSKU.
- [productPricing_getCompetitivePricing](https://sellersheetai.com/docs/mcp-api/tools/productPricing_getCompetitivePricing) (read): Get competitive pricing for up to 20 ASINs or SKUs (Product Pricing v0).
- [productPricing_getCompetitiveSummary](https://sellersheetai.com/docs/mcp-api/tools/productPricing_getCompetitiveSummary) (read): Competitive summary for 1–20 ASINs (Product Pricing v2022-05-01): featured buying options (who wins the featured offer, at what price), lowest-priced offers, reference prices and s
- [productPricing_getFeaturedOfferExpectedPriceBatch](https://sellersheetai.com/docs/mcp-api/tools/productPricing_getFeaturedOfferExpectedPriceBatch) (read): Featured offer expected price (FOEP) for 1–20 seller SKUs (Product Pricing v2022-05-01) — the price at or below which each SKU is expected to win the featured offer, an input for r
- [productPricing_getItemOffers](https://sellersheetai.com/docs/mcp-api/tools/productPricing_getItemOffers) (read): Get lowest-priced offers for a single ASIN (Product Pricing v0).
- [productPricing_getItemOffersBatch](https://sellersheetai.com/docs/mcp-api/tools/productPricing_getItemOffersBatch) (read): Get lowest-priced offers for a batch of ASINs in a single request (Product Pricing v0).
- [productPricing_getListingOffers](https://sellersheetai.com/docs/mcp-api/tools/productPricing_getListingOffers) (read): Get lowest-priced offers for a single seller SKU listing (Product Pricing v0).
- [productPricing_getListingOffersBatch](https://sellersheetai.com/docs/mcp-api/tools/productPricing_getListingOffersBatch) (read): Get lowest-priced offers for a batch of SKU listings in a single request (Product Pricing v0).
- [productPricing_getPricing](https://sellersheetai.com/docs/mcp-api/tools/productPricing_getPricing) (read): Get pricing information for up to 20 ASINs or SKUs (Product Pricing v0).
- [productTypeDefinitions_getDefinitionsProductType](https://sellersheetai.com/docs/mcp-api/tools/productTypeDefinitions_getDefinitionsProductType) (read): Retrieve an Amazon product type's definition — its attribute groups, requirements and a link to its JSON Schema.
- [productTypeDefinitions_searchDefinitionsProductTypes](https://sellersheetai.com/docs/mcp-api/tools/productTypeDefinitions_searchDefinitionsProductTypes) (read): Search for Amazon product types that have definitions available.
- [replenishment_getSellingPartnerMetrics](https://sellersheetai.com/docs/mcp-api/tools/replenishment_getSellingPartnerMetrics) (read): Get aggregated, account-level Subscribe & Save replenishment metrics for the selling partner.
- [replenishment_listOfferMetrics](https://sellersheetai.com/docs/mcp-api/tools/replenishment_listOfferMetrics) (read): List Subscribe & Save replenishment metrics per offer (ASIN/SKU).
- [replenishment_listOffers](https://sellersheetai.com/docs/mcp-api/tools/replenishment_listOffers) (read): List Subscribe & Save offers with eligibility, pricing, inventory, program config, and delivery forecasts.
- [reports_cancelReport](https://sellersheetai.com/docs/mcp-api/tools/reports_cancelReport) (read): Cancel a report Amazon has not started yet (processingStatus IN_QUEUE); an IN_PROGRESS report can no longer be cancelled.
- [reports_cancelReportSchedule](https://sellersheetai.com/docs/mcp-api/tools/reports_cancelReportSchedule) (destructive): Cancel a recurring report schedule.
- [reports_createReport](https://sellersheetai.com/docs/mcp-api/tools/reports_createReport) (read): Submit one SP-API report request; returns reportId at once.
- [reports_createReportSchedule](https://sellersheetai.com/docs/mcp-api/tools/reports_createReportSchedule) (write): Set up a recurring Amazon report.
- [reports_getReport](https://sellersheetai.com/docs/mcp-api/tools/reports_getReport) (read): Get one report's status; when DONE it returns a presigned download URL (data.documentUrl), never the rows — download and process the file yourself (no inline document, preview or s
- [reports_getReportSchedule](https://sellersheetai.com/docs/mcp-api/tools/reports_getReportSchedule) (read): Fetch one report schedule by its reportScheduleId.
- [reports_getReportSchedules](https://sellersheetai.com/docs/mcp-api/tools/reports_getReportSchedules) (read): List active report schedules for one or more reportTypes.
- [reports_getReports](https://sellersheetai.com/docs/mcp-api/tools/reports_getReports) (read): List the SP-API reports Amazon already holds for the store.
- [sales_getOrderMetrics](https://sellersheetai.com/docs/mcp-api/tools/sales_getOrderMetrics) (read): Order metrics (units, order count, revenue) as a time series per granularity — sales trends, year-over-year comparisons, revenue reporting.
- [solicitations_createProductReviewAndSellerFeedbackSolicitation](https://sellersheetai.com/docs/mcp-api/tools/solicitations_createProductReviewAndSellerFeedbackSolicitation) (write): Send a product review and seller feedback solicitation for an order.
- [solicitations_getSolicitationActionsForOrder](https://sellersheetai.com/docs/mcp-api/tools/solicitations_getSolicitationActionsForOrder) (read): Check which solicitation actions are available for an order.
- [vendorInvoices_submitInvoices](https://sellersheetai.com/docs/mcp-api/tools/vendorInvoices_submitInvoices) (destructive): Submit vendor invoices or credit notes to Amazon.
- [vendorOrders_getPurchaseOrder](https://sellersheetai.com/docs/mcp-api/tools/vendorOrders_getPurchaseOrder) (read): Get full details for a single vendor purchase order.
- [vendorOrders_getPurchaseOrders](https://sellersheetai.com/docs/mcp-api/tools/vendorOrders_getPurchaseOrders) (read): List vendor purchase orders created or changed in a window of at most 7 days, no older than 6 months.
- [vendorOrders_getPurchaseOrdersStatus](https://sellersheetai.com/docs/mcp-api/tools/vendorOrders_getPurchaseOrdersStatus) (read): Get purchase order status list.
- [vendorOrders_submitAcknowledgement](https://sellersheetai.com/docs/mcp-api/tools/vendorOrders_submitAcknowledgement) (destructive): Acknowledge (accept, backorder or reject) one or more purchase orders.
- [vendorShipments_GetShipmentDetails](https://sellersheetai.com/docs/mcp-api/tools/vendorShipments_GetShipmentDetails) (read): Get shipment details from Amazon with date and status filters.
- [vendorShipments_GetShipmentLabels](https://sellersheetai.com/docs/mcp-api/tools/vendorShipments_GetShipmentLabels) (read): Get small parcel transport labels from Amazon.
- [vendorShipments_SubmitShipmentConfirmations](https://sellersheetai.com/docs/mcp-api/tools/vendorShipments_SubmitShipmentConfirmations) (destructive): Confirm vendor shipments AFTER dispatch (the advance notice before dispatch is vendorShipments_SubmitShipments).
- [vendorShipments_SubmitShipments](https://sellersheetai.com/docs/mcp-api/tools/vendorShipments_SubmitShipments) (destructive): Submit vendor shipment requests — the advance shipment notice, BEFORE goods ship (after dispatch use vendorShipments_SubmitShipmentConfirmations).
- [vendorTransactionStatus_getTransaction](https://sellersheetai.com/docs/mcp-api/tools/vendorTransactionStatus_getTransaction) (read): Read the status of a vendor retail transaction (an invoice, acknowledgement or shipment submit).
## google_workspace
- [add_sheet_chart](https://sellersheetai.com/docs/mcp-api/tools/add_sheet_chart) (write): Insert a native Google Sheets chart over a range of data.
- [add_sheet_conditional_format](https://sellersheetai.com/docs/mcp-api/tools/add_sheet_conditional_format) (write): Add a conditional formatting rule to a range: a boolean rule (the default) that formats the cells meeting a condition, or a 2- or 3-stop colour gradient.
- [add_sheet_dropdown](https://sellersheetai.com/docs/mcp-api/tools/add_sheet_dropdown) (write): Set, replace or remove the dropdown on a range — the one dropdown tool.
- [add_sheet_named_range](https://sellersheetai.com/docs/mcp-api/tools/add_sheet_named_range) (write): Add a new named range.
- [add_sheet_tab](https://sellersheetai.com/docs/mcp-api/tools/add_sheet_tab) (write): Add a new tab to the spreadsheet.
- [append_doc_text](https://sellersheetai.com/docs/mcp-api/tools/append_doc_text) (write): Append text to the end of the document body.
- [append_sheet_rows](https://sellersheetai.com/docs/mcp-api/tools/append_sheet_rows) (write): Append rows below the last non-empty row of the columns in range_.
- [apply_doc_bullets](https://sellersheetai.com/docs/mcp-api/tools/apply_doc_bullets) (write): Convert paragraphs in a range into a bulleted or numbered list.
- [apply_sheet_table_style](https://sellersheetai.com/docs/mcp-api/tools/apply_sheet_table_style) (write): Style an already-written range as a table: a bold, coloured, centred header row, alternating row bands, thin grey borders and a frozen header.
- [autofit_sheet_columns](https://sellersheetai.com/docs/mcp-api/tools/autofit_sheet_columns) (write): Auto-resize columns to fit their content — wraps Sheets `autoResizeDimensions`.
- [clear_doc](https://sellersheetai.com/docs/mcp-api/tools/clear_doc) (destructive): Delete all content from the document body.
- [clear_sheet_range](https://sellersheetai.com/docs/mcp-api/tools/clear_sheet_range) (destructive): Clear the values in a range.
- [collapse_sheet_group](https://sellersheetai.com/docs/mcp-api/tools/collapse_sheet_group) (write): Collapse (collapsed=True) or expand the row or column groups that lie inside range_.
- [copy_drive_file](https://sellersheetai.com/docs/mcp-api/tools/copy_drive_file) (write): Copy a file, returns new file ID.
- [copy_sheet_format](https://sellersheetai.com/docs/mcp-api/tools/copy_sheet_format) (write): Copy formatting only (no values) from source range to target range.
- [copy_sheet_tab](https://sellersheetai.com/docs/mcp-api/tools/copy_sheet_tab) (write): Copy a tab, with all its formatting, into another spreadsheet (or the same one).
- [create_doc_footer](https://sellersheetai.com/docs/mcp-api/tools/create_doc_footer) (write): Create a document footer and optionally fill it with initial text.
- [create_doc_header](https://sellersheetai.com/docs/mcp-api/tools/create_doc_header) (write): Create a document header and optionally fill it with initial text.
- [create_doc_in_folder](https://sellersheetai.com/docs/mcp-api/tools/create_doc_in_folder) (write): Create a new blank Google Doc inside a Drive folder.
- [create_sheet_filter](https://sellersheetai.com/docs/mcp-api/tools/create_sheet_filter) (write): Create a filter view on a range: a named, saved filter anyone can open from Data > Filter views without touching the tab's one basic filter (set_sheet_basic_filter sets that).
- [create_spreadsheet_in_folder](https://sellersheetai.com/docs/mcp-api/tools/create_spreadsheet_in_folder) (write): Create a new empty Google Sheet in a Drive folder — for light builds, or when you have no local filesystem.
- [delete_doc_range](https://sellersheetai.com/docs/mcp-api/tools/delete_doc_range) (destructive): Delete a content range by index.
- [delete_drive_file](https://sellersheetai.com/docs/mcp-api/tools/delete_drive_file) (destructive): Delete or trash a file.
- [delete_sheet_named_range](https://sellersheetai.com/docs/mcp-api/tools/delete_sheet_named_range) (destructive): Delete a named range.
- [delete_sheet_tab](https://sellersheetai.com/docs/mcp-api/tools/delete_sheet_tab) (destructive): Delete a tab from the spreadsheet.
- [doc_batch_update](https://sellersheetai.com/docs/mcp-api/tools/doc_batch_update) (destructive): Escape hatch: apply a raw Docs API batchUpdate Requests list.
- [find_doc_text](https://sellersheetai.com/docs/mcp-api/tools/find_doc_text) (read): Find every occurrence of a text substring and return its index ranges.
- [find_file_in_folder](https://sellersheetai.com/docs/mcp-api/tools/find_file_in_folder) (read): Find the first Google Sheet in a folder whose name contains a substring — only spreadsheets match; for any other file type use search_drive_files with rawQuery and parentId.
- [find_or_create_folder](https://sellersheetai.com/docs/mcp-api/tools/find_or_create_folder) (write): Find a subfolder by name inside parentId, or create it if missing.
- [find_replace_in_sheet](https://sellersheetai.com/docs/mcp-api/tools/find_replace_in_sheet) (destructive): Find and replace text in a sheet.
- [format_sheet_range](https://sellersheetai.com/docs/mcp-api/tools/format_sheet_range) (write): Set the fill colour, font colour, bold and font size of a range.
- [freeze_sheet_panes](https://sellersheetai.com/docs/mcp-api/tools/freeze_sheet_panes) (write): Freeze rows and/or columns in a sheet.
- [get_doc](https://sellersheetai.com/docs/mcp-api/tools/get_doc) (read): Get the full Docs API document resource (body, headers, styles, revisionId).
- [get_doc_metadata](https://sellersheetai.com/docs/mcp-api/tools/get_doc_metadata) (read): Get document title, revisionId, and documentStyle.
- [get_doc_text](https://sellersheetai.com/docs/mcp-api/tools/get_doc_text) (read): Extract the plain text of the document body, table cells included (headers and footers are not).
- [get_drive_file](https://sellersheetai.com/docs/mcp-api/tools/get_drive_file) (read): Get file metadata.
- [get_sheet_cell](https://sellersheetai.com/docs/mcp-api/tools/get_sheet_cell) (read): Read everything about a cell or a small range in one call: value, formula, format, note, hyperlink and dropdown.
- [get_sheet_links](https://sellersheetai.com/docs/mcp-api/tools/get_sheet_links) (read): Get hyperlinks from a range.
- [get_sheet_metadata](https://sellersheetai.com/docs/mcp-api/tools/get_sheet_metadata) (read): Get the spreadsheet's metadata: title, locale, time zone and every tab's properties.
- [get_sheet_named_range](https://sellersheetai.com/docs/mcp-api/tools/get_sheet_named_range) (read): Get a specific named range.
- [get_sheet_notes](https://sellersheetai.com/docs/mcp-api/tools/get_sheet_notes) (read): Get notes from a range.
- [group_sheet_rows_cols](https://sellersheetai.com/docs/mcp-api/tools/group_sheet_rows_cols) (write): Group rows or columns (creates a collapsible [+] toggle in the sheet).
- [hide_sheet_rows](https://sellersheetai.com/docs/mcp-api/tools/hide_sheet_rows) (write): Hide rows in a sheet, or show hidden rows again.
- [import_sheet_tsv](https://sellersheetai.com/docs/mcp-api/tools/import_sheet_tsv) (destructive): Server-side parse + write of TSV (tab-separated) text.
- [insert_doc_heading](https://sellersheetai.com/docs/mcp-api/tools/insert_doc_heading) (write): Convenience: insert a line of text and apply HEADING_{level}.
- [insert_doc_image](https://sellersheetai.com/docs/mcp-api/tools/insert_doc_image) (write): Insert an inline image from a public URL.
- [insert_doc_page_break](https://sellersheetai.com/docs/mcp-api/tools/insert_doc_page_break) (write): Insert a page break.
- [insert_doc_section_break](https://sellersheetai.com/docs/mcp-api/tools/insert_doc_section_break) (write): Insert a section break (Docs adds a newline before it; not allowed inside a table, header or footer).
- [insert_doc_table](https://sellersheetai.com/docs/mcp-api/tools/insert_doc_table) (write): Insert an empty table.
- [insert_doc_text](https://sellersheetai.com/docs/mcp-api/tools/insert_doc_text) (write): Insert text at a specific index.
- [insert_sheet_rows_cols](https://sellersheetai.com/docs/mcp-api/tools/insert_sheet_rows_cols) (write): Insert rows or columns in a sheet.
- [insert_sheet_sparkline](https://sellersheetai.com/docs/mcp-api/tools/insert_sheet_sparkline) (write): Insert an in-cell SPARKLINE chart by writing the formula for you.
- [list_drive_files](https://sellersheetai.com/docs/mcp-api/tools/list_drive_files) (read): List the files directly inside a folder of your SellerSheet workspace.
- [list_drive_permissions](https://sellersheetai.com/docs/mcp-api/tools/list_drive_permissions) (read): List all permissions on a file.
- [list_sheet_named_ranges](https://sellersheetai.com/docs/mcp-api/tools/list_sheet_named_ranges) (read): List all named ranges in the spreadsheet.
- [list_sheet_tabs](https://sellersheetai.com/docs/mcp-api/tools/list_sheet_tabs) (read): List all tabs in the spreadsheet.
- [merge_sheet_cells](https://sellersheetai.com/docs/mcp-api/tools/merge_sheet_cells) (destructive): Merge cells in a range.
- [move_file_to_folder](https://sellersheetai.com/docs/mcp-api/tools/move_file_to_folder) (write): Move a file to a new parent folder.
- [paste_sheet_with_format](https://sellersheetai.com/docs/mcp-api/tools/paste_sheet_with_format) (destructive): Write values AND apply uniform format to the same range — saves a round-trip vs calling write_sheet then format_sheet_range.
- [protect_sheet_range](https://sellersheetai.com/docs/mcp-api/tools/protect_sheet_range) (write): Protect a range from editing.
- [read_sheet](https://sellersheetai.com/docs/mcp-api/tools/read_sheet) (read): Read cell values from a range.
- [read_sheet_format](https://sellersheetai.com/docs/mcp-api/tools/read_sheet_format) (read): Read cell formatting from a range.
- [remove_doc_bullets](https://sellersheetai.com/docs/mcp-api/tools/remove_doc_bullets) (write): Remove bullet/number glyphs from paragraphs in a range.
- [rename_doc](https://sellersheetai.com/docs/mcp-api/tools/rename_doc) (write): Rename a Google Doc via the Drive API.
- [rename_drive_file](https://sellersheetai.com/docs/mcp-api/tools/rename_drive_file) (write): Rename a file.
- [rename_sheet_tab](https://sellersheetai.com/docs/mcp-api/tools/rename_sheet_tab) (write): Rename an existing tab.
- [replace_doc_text](https://sellersheetai.com/docs/mcp-api/tools/replace_doc_text) (destructive): Find and replace text across the entire document.
- [resize_sheet_columns](https://sellersheetai.com/docs/mcp-api/tools/resize_sheet_columns) (write): Resize columns in a sheet.
- [resize_sheet_rows](https://sellersheetai.com/docs/mcp-api/tools/resize_sheet_rows) (write): Resize rows in a sheet.
- [save_url_to_drive](https://sellersheetai.com/docs/mcp-api/tools/save_url_to_drive) (write): Save an Amazon image-CDN file (media-amazon.com, ssl-images-amazon.com and their .cn twins; at most 10 MB) straight to a Drive folder — the server streams it.
- [search_drive_files](https://sellersheetai.com/docs/mcp-api/tools/search_drive_files) (read): Search files by text or raw Drive query inside your SellerSheet workspace.
- [set_doc_table_cell_text](https://sellersheetai.com/docs/mcp-api/tools/set_doc_table_cell_text) (destructive): Replace the text content of a specific table cell.
- [set_sheet_basic_filter](https://sellersheetai.com/docs/mcp-api/tools/set_sheet_basic_filter) (write): Set a basic filter (column dropdown arrows) on a header row range.
- [set_sheet_borders](https://sellersheetai.com/docs/mcp-api/tools/set_sheet_borders) (write): Add cell borders to a range.
- [set_sheet_number_format](https://sellersheetai.com/docs/mcp-api/tools/set_sheet_number_format) (write): Set number format for a range.
- [setup_sheet](https://sellersheetai.com/docs/mcp-api/tools/setup_sheet) (write): Create a tab if it is missing, write a key row and a label row, and format them.
- [share_drive_file](https://sellersheetai.com/docs/mcp-api/tools/share_drive_file) (write): Share a file with one person (email) or a whole domain (domain; email wins if both are passed).
- [sheet_batch_update](https://sellersheetai.com/docs/mcp-api/tools/sheet_batch_update) (destructive): Apply several raw Sheets API v4 requests (spreadsheets.batchUpdate) in one call.
- [sort_sheet_range](https://sellersheetai.com/docs/mcp-api/tools/sort_sheet_range) (destructive): Sort a range by specified columns.
- [start_drive_upload](https://sellersheetai.com/docs/mcp-api/tools/start_drive_upload) (write): Begin a direct upload of LOCAL bytes to Drive.
- [style_doc_text_by_match](https://sellersheetai.com/docs/mcp-api/tools/style_doc_text_by_match) (write): Find every occurrence of `needle` and apply the given text style.
- [ungroup_sheet_rows_cols](https://sellersheetai.com/docs/mcp-api/tools/ungroup_sheet_rows_cols) (write): Remove a row/column group (ungroup).
- [unmerge_sheet_cells](https://sellersheetai.com/docs/mcp-api/tools/unmerge_sheet_cells) (write): Unmerge cells in a range.
- [unprotect_sheet_range](https://sellersheetai.com/docs/mcp-api/tools/unprotect_sheet_range) (write): Remove protection from a range.
- [unshare_drive_file](https://sellersheetai.com/docs/mcp-api/tools/unshare_drive_file) (destructive): Remove a permission from a file.
- [update_doc_document_style](https://sellersheetai.com/docs/mcp-api/tools/update_doc_document_style) (write): Update document-level properties: margins, page size, background.
- [update_doc_paragraph_style](https://sellersheetai.com/docs/mcp-api/tools/update_doc_paragraph_style) (write): Apply paragraph-level style to a range.
- [update_doc_text_style](https://sellersheetai.com/docs/mcp-api/tools/update_doc_text_style) (write): Apply character-level text styles to an index range (from find_doc_text or get_doc).
- [update_sheet_note](https://sellersheetai.com/docs/mcp-api/tools/update_sheet_note) (write): Update note on a cell or range.
- [write_doc_structured](https://sellersheetai.com/docs/mcp-api/tools/write_doc_structured) (destructive): Build a document from a list of semantic blocks in ONE call.
- [write_sheet](https://sellersheetai.com/docs/mcp-api/tools/write_sheet) (destructive): Write a 2D block of values to a range; every cell is parsed as if typed (USER_ENTERED).
- [write_sheet_formula](https://sellersheetai.com/docs/mcp-api/tools/write_sheet_formula) (destructive): Fill one formula into a cell — or across EVERY cell of a range.
## noon
- [noon_catalog_BarcodeSkuMap](https://sellersheetai.com/docs/mcp-api/tools/noon_catalog_BarcodeSkuMap) (destructive): Map existing partner SKUs to barcodes (UPC/EAN/ISBN) on noon, synchronously, so warehouse systems know what a scanned barcode is; a new barcode is created.
- [noon_catalog_ChildSkuDelete](https://sellersheetai.com/docs/mcp-api/tools/noon_catalog_ChildSkuDelete) (destructive): DELETE child (sellable variant) SKUs from the noon catalog — DESTRUCTIVE, irreversible.
- [noon_catalog_CreateBarcodeImport](https://sellersheetai.com/docs/mcp-api/tools/noon_catalog_CreateBarcodeImport) (destructive): Create an ASYNCHRONOUS bulk barcode-to-partner_sku import on noon — for mapping barcodes in bulk.
- [noon_catalog_GenerateImportSignedUrl](https://sellersheetai.com/docs/mcp-api/tools/noon_catalog_GenerateImportSignedUrl) (read): Get a short-lived GCS signed URL to upload a barcode-import file to noon — step 1 of a file-based import, for more rows than is practical inline (over 10,000; smaller batches go in
- [noon_catalog_GetImportStatus](https://sellersheetai.com/docs/mcp-api/tools/noon_catalog_GetImportStatus) (read): Poll a noon bulk import until it is final, then read which rows were rejected and why.
- [noon_catalog_ParentSkuDelete](https://sellersheetai.com/docs/mcp-api/tools/noon_catalog_ParentSkuDelete) (destructive): DELETE parent SKUs from the noon catalog — DESTRUCTIVE and CASCADES: the non-sellable base product and every child SKU under it are removed.
- [noon_content_GetContent](https://sellersheetai.com/docs/mcp-api/tools/noon_content_GetContent) (read): Fetch a noon product's stored content, images and per-language completeness / QC status — to check whether a listing is complete and approved.
- [noon_content_ListCategories](https://sellersheetai.com/docs/mcp-api/tools/noon_content_ListCategories) (read): List every product category code in the noon catalog — to choose a new product's category before creating it; then read its fields with noon_content_ListCategoryAttributes.
- [noon_content_ListCategoryAttributes](https://sellersheetai.com/docs/mcp-api/tools/noon_content_ListCategoryAttributes) (read): Get the attribute schema a product in one category must satisfy — read it before building the attributes of noon_content_UpsertProduct: every is_mandatory attribute needs a value m
- [noon_content_UpsertProduct](https://sellersheetai.com/docs/mcp-api/tools/noon_content_UpsertProduct) (destructive): Create or update a product listing on noon — new partner_skus create a product, known ones update the product they belong to.
- [noon_content_draft_from_amazon_asin](https://sellersheetai.com/docs/mcp-api/tools/noon_content_draft_from_amazon_asin) (write): Turn one of your Amazon listings into a noon listing draft in SellerSheet.
- [noon_content_load_publish_queue_content](https://sellersheetai.com/docs/mcp-api/tools/noon_content_load_publish_queue_content) (read): Load an existing noon product into a noon Publish Queue sheet for editing — one GetContent shaped onto the sheet's row-5 keys, with the columns the sheet still lacks and the produc
- [noon_content_prepare_publish_queue_template](https://sellersheetai.com/docs/mcp-api/tools/noon_content_prepare_publish_queue_template) (read): Build the ordered column spec for a noon Publish Queue sheet by merging noon's attribute schema for every category the sheet holds — call it before writing or extending the sheet.
- [noon_impex_CreateExport](https://sellersheetai.com/docs/mcp-api/tools/noon_impex_CreateExport) (read): Start a noon export (a report file) and return its export_code at once; noon builds the file asynchronously.
- [noon_impex_GetExportCategoryList](https://sellersheetai.com/docs/mcp-api/tools/noon_impex_GetExportCategoryList) (read): List the noon export categories this account can request, each with its required and optional params — call it before noon_impex_CreateExport.
- [noon_impex_GetExportStatus](https://sellersheetai.com/docs/mcp-api/tools/noon_impex_GetExportStatus) (read): Poll a noon export by its export_code; when it is COMPLETE, call noon_impex_download_export.
- [noon_impex_download_export](https://sellersheetai.com/docs/mcp-api/tools/noon_impex_download_export) (write): Download and parse a COMPLETE noon export; the full file is also saved to the operator's Drive when a reports folder is configured.
- [noon_inbound_CreateShipment](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_CreateShipment) (write): Create an FBN inbound shipment (ASN) header in CREATED status with no items — step 2, after noon_inbound_ListEligibleItems.
- [noon_inbound_DeleteShipmentItems](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_DeleteShipmentItems) (destructive): Remove items from a CREATED noon ASN, at most 1000 per call — to fix a draft before sealing; to change a quantity use noon_inbound_UpdateShipmentItems.
- [noon_inbound_GetShipment](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_GetShipment) (read): Get one noon ASN's header (no items) — its lifecycle status and receiving progress, at any time.
- [noon_inbound_GetSlotAvailability](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_GetSlotAvailability) (read): Get the destination warehouses and check-in days / time slots open to a SEALED noon ASN — after sealing it with noon_inbound_UpdateShipmentStatus, before noon_inbound_ScheduleShipm
- [noon_inbound_ListEligibleItems](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_ListEligibleItems) (read): List the catalog SKUs noon accepts on an FBN inbound shipment (ASN), with their storage_type — step 1 of an ASN.
- [noon_inbound_ListShipmentItems](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_ListShipmentItems) (read): List the items on a noon ASN in any status, with product details (paginated) — to verify a draft or sealed ASN's contents.
- [noon_inbound_ListShipments](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_ListShipments) (read): List noon ASN headers (no items), optionally by status or destination country — to find a draft or audit history (paginated).
- [noon_inbound_ScheduleShipment](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_ScheduleShipment) (write): Book a SEALED noon ASN for inbound delivery at a warehouse, date and time slot from noon_inbound_GetSlotAvailability — the final step; it also assigns the destination warehouse (SE
- [noon_inbound_UpdateShipment](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_UpdateShipment) (destructive): Set free-form metadata (misc, e.g.
- [noon_inbound_UpdateShipmentItems](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_UpdateShipmentItems) (destructive): Add items to, or change quantities on, a CREATED noon ASN — upsert by partner_sku (an existing SKU's qty is overwritten), at most 1000 per call; then SEAL it with noon_inbound_Upda
- [noon_inbound_UpdateShipmentStatus](https://sellersheetai.com/docs/mcp-api/tools/noon_inbound_UpdateShipmentStatus) (destructive): Seal, cancel or reschedule a noon ASN.
- [noon_offer_GetProductOffers](https://sellersheetai.com/docs/mcp-api/tools/noon_offer_GetProductOffers) (read): Get a partner SKU's offers in every country and why any is not buyable — the check to run when a SKU shows live but does not sell (noon_status='live' does not mean purchasable).
- [noon_pricing_BatchGetPricing](https://sellersheetai.com/docs/mcp-api/tools/noon_pricing_BatchGetPricing) (read): Read the current price, msrp and is_active noon holds for a batch of partner SKUs — the authoritative state before repricing, or to confirm an upsert took effect.
- [noon_pricing_BatchUpsertPricing](https://sellersheetai.com/docs/mcp-api/tools/noon_pricing_BatchUpsertPricing) (destructive): Create or update price, msrp and is_active for a batch of partner SKUs; only the fields you pass change.
- [noon_returns_ListReturnReferences](https://sellersheetai.com/docs/mcp-api/tools/noon_returns_ListReturnReferences) (read): Look up the purchased items being returned that match a scanned barcode, across the merchants you can access, with every barcode reference on each — when a return arrives and you n
- [noon_stock_GetStock](https://sellersheetai.com/docs/mcp-api/tools/noon_stock_GetStock) (read): Read the stock quantity noon holds for each (warehouse_code, partner_sku) pair — before a restock or reprice; change quantities with noon_stock_UpdateStock.
- [noon_stock_UpdateStock](https://sellersheetai.com/docs/mcp-api/tools/noon_stock_UpdateStock) (destructive): Overwrite the available stock (and optionally processing_time) noon holds per warehouse_code + partner_sku; check each row's status, then re-read with noon_stock_GetStock.
- [noon_warehouse_platform_ListWarehouses](https://sellersheetai.com/docs/mcp-api/tools/noon_warehouse_platform_ListWarehouses) (read): List the warehouses on the noon partner account, up to 500 per page — to find the warehouse_code the stock tools take.
- [noon_xborder_pricing_BatchGetTransferPrice](https://sellersheetai.com/docs/mcp-api/tools/noon_xborder_pricing_BatchGetTransferPrice) (read): Read the cross-border USD transfer price, MSRP and active state noon holds for up to 1000 partner SKUs — check them before noon_xborder_pricing_BatchUpsertTransferPrice.
- [noon_xborder_pricing_BatchUpsertProduct](https://sellersheetai.com/docs/mcp-api/tools/noon_xborder_pricing_BatchUpsertProduct) (destructive): Create or update the cross-border product record noon needs to ship a SKU cross-border (dimensions, weights, HS code) — when onboarding a new cross-border SKU, before its noon_xbor
- [noon_xborder_pricing_BatchUpsertTransferPrice](https://sellersheetai.com/docs/mcp-api/tools/noon_xborder_pricing_BatchUpsertTransferPrice) (destructive): Set or change the USD transfer price and MSRP noon uses to list a SKU cross-border, or toggle it active, for a batch of SKUs.
## sellersheet
- [check_image_job](https://sellersheetai.com/docs/mcp-api/tools/check_image_job) (read): Poll an async image job (edit_image).
- [check_image_jobs](https://sellersheetai.com/docs/mcp-api/tools/check_image_jobs) (read): Batch-poll multiple async image jobs in one call.
- [credits_quote](https://sellersheetai.com/docs/mcp-api/tools/credits_quote) (read): Price ONE paid action for this user, on their model route, before spending — quote data.credits to the user, never a number from memory.
- [customerFeedback_insights_report_status](https://sellersheetai.com/docs/mcp-api/tools/customerFeedback_insights_report_status) (read): Poll a Buyer insights job submitted by customerFeedback_insights_report — every ~4 s until status is done or error.
- [edit_image](https://sellersheetai.com/docs/mcp-api/tools/edit_image) (write): Edit one image, or compose 2–10 into one, from a text instruction (1 input = revise, 2 or more = compose): background swaps, style transfer, object add/remove, composites.
- [fbaInbound_create_sta_sheet](https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_create_sta_sheet) (write): Create the plan workbook for an FBA inbound plan — the SAME workbook the sidebar's "Create STA SS" builds, so the sidebar buttons can continue any step: the stepper tab (STA-BoxFir
- [generate_image](https://sellersheetai.com/docs/mcp-api/tools/generate_image) (write): Generate images from a text prompt — listing photos, A+ banners, lifestyle and infographic shots, icons.
- [get_table_schema](https://sellersheetai.com/docs/mcp-api/tools/get_table_schema) (read): Return the schema for one rpt_* table — column names, types, unique key.
- [get_user_context](https://sellersheetai.com/docs/mcp-api/tools/get_user_context) (read): Get the user's plan, stores, workspace folders, permissions, credits and the skills catalog.
- [list_amc_templates](https://sellersheetai.com/docs/mcp-api/tools/list_amc_templates) (read): The AMC queries SellerSheet runs for every store whose AMC is on, and the warehouse table each one fills.
- [list_generated_images](https://sellersheetai.com/docs/mcp-api/tools/list_generated_images) (read): List images already generated and saved for a store — newest first.
- [list_report_syncs](https://sellersheetai.com/docs/mcp-api/tools/list_report_syncs) (read): List a store's report sync schedules — check sync health before trusting rpt_* data.
- [query_report_data](https://sellersheetai.com/docs/mcp-api/tools/query_report_data) (read): Query the synced report warehouse (rpt_* tables) — rows without calling Amazon.
- [reverse_prompt](https://sellersheetai.com/docs/mcp-api/tools/reverse_prompt) (write): Describe reference image(s) as a structured English prompt — step 1 of a restyle: adapt the fields to your product (subject, colors and materials stay faithful; swap scene, lightin
- [set_synthetic_performer](https://sellersheetai.com/docs/mcp-api/tools/set_synthetic_performer) (destructive): Toggle Amazon's contains-synthetic-performer disclosure tag on an already-saved image, without regenerating it.
# ads_associate_accounts (https://sellersheetai.com/docs/mcp-api/tools/ads_associate_accounts)
> Link an advertising account to an Amazon Ads manager account.
Access: **WRITE** · toolset amazon_ads · family ads.manager-accounts
Amazon Ads API · LinkAdvertisingAccountsToManagerAccountPublicAPI · POST /managerAccounts/{managerAccountId}/associate Docs: https://advertising.amazon.com/API/docs/en-us/reference/1-0/managerAccount#tag/Manager-Accounts/operation/LinkAdvertisingAccountsToManagerAccountPublicAPI Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_associate_accounts",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"managerAccountId": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_associate_accounts \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","managerAccountId":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `managerAccountId` | string | yes | data.result.managerAccounts[].managerAccountId from ads_get_manager_accounts. |
| `body` | object | yes | {accounts: [{id, type, roles: [ONE role]}]} (max 20) — for type ACCOUNT_ID the id is the profile's accountInfo.id (may begin with 'ENTITY'); a DSP_ADVERTISER_ID comes from ads_dsp_advertisers. |
## Result
- 207, one result per item; an item whose code is not "Ok" (or that is listed under error / failures) failed — read its details.
- `data.result.succeedAccounts / data.result.failedAccounts[]` — {account, error} — any failedAccounts entry was not linked.
# ads_create_ads_account (https://sellersheetai.com/docs/mcp-api/tools/ads_create_ads_account)
> Register a new Amazon Ads account.
Access: **WRITE** · toolset amazon_ads · family ads.accounts
List existing accounts first with ads_list_ads_accounts so you do not create a duplicate. Amazon Ads API · RegisterAdsAccount · POST /adsAccounts Docs: https://advertising.amazon.com/API/docs/en-us/account-management#tag/Account/operation/RegisterAdsAccount Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_create_ads_account",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_ads_account \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | the request body — its fields, enums and required marks are in this parameter's schema. |
## Result
- Amazon's payload in data.result.
- `data.result.adsAccount` — {adsAccountId, accountName, status} — status CREATED, PENDING, PARTIALLY_CREATED or DISABLED.
# ads_create_manager_account (https://sellersheetai.com/docs/mcp-api/tools/ads_create_manager_account)
> Create an Amazon Ads manager account.
Access: **WRITE** · toolset amazon_ads · family ads.manager-accounts
List existing ones first with ads_get_manager_accounts. Amazon Ads API · createManagerAccount · POST /managerAccounts Docs: https://advertising.amazon.com/API/docs/en-us/reference/1-0/managerAccount#tag/Manager-Accounts/operation/createManagerAccount Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_create_manager_account",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_manager_account \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | the request body — its fields, enums and required marks are in this parameter's schema. |
## Result
- Amazon's payload in data.result.
# ads_create_stream_subscription (https://sellersheetai.com/docs/mcp-api/tools/ads_create_stream_subscription)
> Create an Amazon Marketing Stream subscription: Amazon pushes one dataset (dataSetId, from Amazon's Marketing Stream data guide) to an AWS SQS queue or Firehose stream the seller o
Access: **WRITE** · toolset amazon_ads · family ads.marketing-stream
wns (destination ARN). Only for a seller who already runs that AWS endpoint; read the new subscription's status with ads_get_stream_subscription. Amazon Ads API · CreateStreamSubscription · POST /streams/subscriptions Docs: https://advertising.amazon.com/API/docs/en-us/amazon-marketing-stream/openapi#tag/Stream-Subscription/operation/CreateStreamSubscription Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_create_stream_subscription",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_stream_subscription \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | the request body — its fields, enums and required marks are in this parameter's schema. |
## Result
- Amazon's payload in data.result.
- `data.result.subscriptionId` — for ads_get_stream_subscription / ads_update_stream_subscription.
# ads_disassociate_accounts (https://sellersheetai.com/docs/mcp-api/tools/ads_disassociate_accounts)
> Unlink an advertising account from an Amazon Ads manager account — the manager loses access to that account.
Access: **DESTRUCTIVE** · toolset amazon_ads · family ads.manager-accounts
Amazon Ads API · UnlinkAdvertisingAccountsToManagerAccountPublicAPI · POST /managerAccounts/{managerAccountId}/disassociate Docs: https://advertising.amazon.com/API/docs/en-us/reference/1-0/managerAccount#tag/Manager-Accounts/operation/UnlinkAdvertisingAccountsToManagerAccountPublicAPI Gate: commit — interactive: restate exactly what will happen, wait for a typed CONFIRM; autopilot: only within the seller's instruction and stated limits; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_disassociate_accounts",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"managerAccountId": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_disassociate_accounts \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","managerAccountId":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `managerAccountId` | string | yes | data.result.managerAccounts[].managerAccountId from ads_get_manager_accounts. |
| `body` | object | yes | {accounts: [{id, type}]} (max 20) — id is that manager's linkedAccounts[].accountId (or its dspAdvertiserId) from ads_get_manager_accounts. |
## Result
- 207, one result per item; an item whose code is not "Ok" (or that is listed under error / failures) failed — read its details.
- `data.result.succeedAccounts / data.result.failedAccounts[]` — {account, error} — any failedAccounts entry is still linked.
# ads_dsp_advertisers (https://sellersheetai.com/docs/mcp-api/tools/ads_dsp_advertisers)
> List Amazon DSP advertisers accessible to this profile — the `advertiserId` a DSP report needs in its `filters` (e.g.
Access: **READ** · toolset amazon_ads · family ads.dsp-advertiser
{"field": "advertiserId", "values": [""]}). Amazon Ads API · GET /dsp/advertisers
## Call it
MCP tool call:
```json
{
"name": "ads_dsp_advertisers",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_dsp_advertisers \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | | optional query params dict: {"startIndex": 0, "count": 100, "advertiserIdFilter": ","}. |
## Result
- Amazon's payload in data.result.
## Params (Amazon schema)
- startIndex: integer (max 29900) count: integer (1–100) — max 100 advertisers per call advertiserIdFilter: string
## Gotchas
- Requires an AGENCY-type ad profile. Seller/vendor profiles return 400 "Selected profile type is not agency" — those accounts have no DSP advertiser seat, so DSP offline reports can't run for them.
# ads_get_ads_account (https://sellersheetai.com/docs/mcp-api/tools/ads_get_ads_account)
> Get one Amazon Ads account by id.
Access: **READ** · toolset amazon_ads · family ads.accounts
Amazon Ads API · GetAccount · GET /adsAccounts/{advertisingAccountId} Docs: https://advertising.amazon.com/API/docs/en-us/account-management#tag/Account/operation/GetAccount
## Call it
MCP tool call:
```json
{
"name": "ads_get_ads_account",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"advertisingAccountId": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_ads_account \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","advertisingAccountId":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `advertisingAccountId` | string | yes | data.result.adsAccounts[].adsAccountId from ads_list_ads_accounts. |
## Result
- Amazon's payload in data.result.
# ads_get_asin_engagement_for_store (https://sellersheetai.com/docs/mcp-api/tools/ads_get_asin_engagement_for_store)
> Per-ASIN engagement on a brand's Store pages (renders, views, clicks, add-to-carts, orders, in-stock rate), or a store-level TOTAL_VIEWS / TOTAL_CLICKS row.
Access: **READ** · toolset amazon_ads · family ads.stores
For page / date / traffic-source traffic and sales use ads_get_insights_for_store_api. Amazon Ads API · getAsinEngagementForStore · POST /stores/{brandEntityId}/asinMetrics Docs: https://advertising.amazon.com/API/docs/en-us/stores/open-api#tag/Stores-Analytics/operation/getAsinEngagementForStore
## Call it
MCP tool call:
```json
{
"name": "ads_get_asin_engagement_for_store",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"brandEntityId": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_asin_engagement_for_store \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","brandEntityId":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `brandEntityId` | string | yes | from ads_get_brands. |
| `body` | object | yes | {startDate, endDate, metrics: [...]}; dimension='ASIN' for per-ASIN rows, omitted for a store-aggregate row; optional orderBy / sortBy. |
## Result
- Amazon's payload in data.result.
- `data.result.metricsDetails[]` — one map per ASIN (max 1500), keyed by the requested metrics.
## Gotchas
- A store-aggregate call (dimension omitted) accepts ONLY TOTAL_VIEWS and TOTAL_CLICKS — every other metric needs dimension='ASIN'. sortBy is valid only when dimension='ASIN'.
- Amazon returns 400 "Invalid request body" when the brand has no published Store page.
# ads_get_brands (https://sellersheetai.com/docs/mcp-api/tools/ads_get_brands)
> Sponsored Brands: list the brands registered under this advertiser profile — brandId, brandRegistryName and (sellers only) the brandEntityId the Store insights tools take (ads_get_
Access: **READ** · toolset amazon_ads · family ads.sb3
asin_engagement_for_store, ads_get_insights_for_store_api). Amazon Ads API · getBrands · GET /brands Docs: https://advertising.amazon.com/API/docs/en-us/sponsored-brands/3-0/openapi#tag/Brands/operation/getBrands
## Call it
MCP tool call:
```json
{
"name": "ads_get_brands",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_brands \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `brand_type_filter` | string | | keep one brand type; omit for every brand. Allowed: brandRegistry \| bookAuthor. Allowed: brandRegistry \| bookAuthor. |
## Result
- Amazon's payload in data.result.
- `data.result` — a list of {brandId, brandEntityId, brandRegistryName}.
# ads_get_campaigns_validation_configs (https://sellersheetai.com/docs/mcp-api/tools/ads_get_campaigns_validation_configs)
> Validation rules Amazon enforces on campaign create/update — allowed values, ranges, and required fields, before building a payload.
Access: **READ** · toolset amazon_ads · family ads.validation-configurations
Amazon Ads API · getCampaignsValidationConfigs · POST /validationConfigurations/campaigns Docs: https://advertising.amazon.com/API/docs/en-us/validation-configuration#tag/Validation-Configurations-Retrieval/operation/getCampaignsValidationConfigs
## Call it
MCP tool call:
```json
{
"name": "ads_get_campaigns_validation_configs",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_campaigns_validation_configs \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | | optional context — countryCodesList (Amazon's codes: 'UK', not 'GB'), entityTypesList, programTypesList (see Body). Pass all three to get one context instead of the whole set; the answer is under data.result.campaignValidationConfigs. |
## Result
- Amazon's payload in data.result.
## Gotchas
- The payload is large (~200KB+) — filter to the relevant section before writing it anywhere.
# ads_get_insights_for_store_api (https://sellersheetai.com/docs/mcp-api/tools/ads_get_insights_for_store_api)
> Store traffic / sales / dwell / bounce insights for a brand's Store page.
Access: **READ** · toolset amazon_ads · family ads.stores
Amazon Ads API · getInsightsForStoreAPI · POST /stores/{brandEntityId}/insights Docs: https://advertising.amazon.com/API/docs/en-us/stores/open-api#tag/Stores-Analytics/operation/getInsightsForStoreAPI
## Call it
MCP tool call:
```json
{
"name": "ads_get_insights_for_store_api",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"brandEntityId": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_insights_for_store_api \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","brandEntityId":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `brandEntityId` | string | yes | from ads_get_brands. |
| `body` | object | yes | {dimension: DATE\|PAGE\|SOURCE\|TAG\|STORE, startDate, endDate, metrics: [...]}; optional filter {pageIds, sources, tags}, maxResult (1-1500), paginationToken, language. |
## Result
- Amazon's payload in data.result.
- `data.result.metricsDetails[]` — one map per dimension value (max 1500).
- `data.result.paginationToken` — pass back as body.paginationToken with the SAME request body, within 24 h.
## Gotchas
- The metric allowlist depends on dimension: DATE/PAGE/SOURCE/TAG take the traffic metrics (VIEWS, ORDERS, UNITS, SALES, VISITS, DWELL_TIME, BOUNCE_RATE, ...); STORE takes only DWELL_TIME, BOUNCE_RATE, NEW_TO_STORE. Non-SQS metrics: exactly ONE per call; SQS (Store-Quality) metrics may be combined freely.
- filter accepts pageIds, sources, tags, but sources+tags together are not supported.
- language is SQS-only (default 'en'), e.g. 'fr-FR', 'de-DE', 'ja-JP', 'zh-CN', 'ar-AE', 'en-GB'.
# ads_get_invoice (https://sellersheetai.com/docs/mcp-api/tools/ads_get_invoice)
> Get one Amazon Ads invoice by id — invoice lines, payments, adjustments and tax detail.
Access: **READ** · toolset amazon_ads · family ads.billing
A presigned PDF/XML link exists only on a government invoice (governmentInvoiceInformation.governmentDocumentS3Link). Amazon Ads API · getInvoice · GET /invoices/{invoiceId} Docs: https://advertising.amazon.com/API/docs/en-us/billing#tag/invoice/operation/getInvoice
## Call it
MCP tool call:
```json
{
"name": "ads_get_invoice",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"invoiceId": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_invoice \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","invoiceId":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `invoiceId` | string | yes | data.result.payload.invoiceSummaries[].id from ads_list_invoices. |
## Result
- Amazon's payload in data.result.
# ads_get_localized_currencies (https://sellersheetai.com/docs/mcp-api/tools/ads_get_localized_currencies)
> Convert amounts to a target marketplace's local currency — use before creating campaigns in a different marketplace than the store's primary one.
Access: **READ** · toolset amazon_ads · family ads.localization
Amazon Ads API · getLocalizedCurrencies · POST /currencies/localize Docs: https://advertising.amazon.com/API/docs/en-us/localization#tag/Currency-Localization/operation/getLocalizedCurrencies
## Call it
MCP tool call:
```json
{
"name": "ads_get_localized_currencies",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_localized_currencies \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | {localizeCurrencyRequests: [{currency: {amount}}], sourceCountryCode, sourceMarketplaceId, targetCountryCodes: [...]}. |
## Result
- Amazon's payload in data.result.
# ads_get_localized_keywords (https://sellersheetai.com/docs/mcp-api/tools/ads_get_localized_keywords)
> Translate keyword targeting between marketplaces.
Access: **READ** · toolset amazon_ads · family ads.localization
Amazon Ads API · getLocalizedKeywords · POST /keywords/localize Docs: https://advertising.amazon.com/API/docs/en-us/localization#tag/Keyword-Localization/operation/getLocalizedKeywords
## Call it
MCP tool call:
```json
{
"name": "ads_get_localized_keywords",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_localized_keywords \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | {localizeKeywordRequests: [{localizationKeyword: {keyword}}], sourceDetails: {countryCode \| marketplaceId \| locale}, targetDetails: {countryCodes \| marketplaceIds \| locales: [...]}} — targetDetails is ONE object of lists, not a list of objects. |
## Result
- Amazon's payload in data.result.
# ads_get_localized_products (https://sellersheetai.com/docs/mcp-api/tools/ads_get_localized_products)
> Map products (ASIN or SKU) from the source marketplace to their equivalents in up to 10 target marketplaces — Sponsored Products only.
Access: **READ** · toolset amazon_ads · family ads.localization
A target fails when no matching product exists there or the advertiser cannot advertise it. Amazon Ads API · getLocalizedProducts · POST /products/localize Docs: https://advertising.amazon.com/API/docs/en-us/localization#tag/Product-Localization/operation/getLocalizedProducts
## Call it
MCP tool call:
```json
{
"name": "ads_get_localized_products",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_localized_products \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | {adType, entityType, sourceAdvertiserId, sourceCountryCode, targetDetails: [{countryCode, marketplaceId, advertiserId}] (advertiserId required on each), localizeProductRequests: [{product: {asin \| sku}}]}. |
## Result
- Amazon's payload in data.result.
# ads_get_localized_targeting_expression (https://sellersheetai.com/docs/mcp-api/tools/ads_get_localized_targeting_expression)
> Translate targeting expressions between marketplaces.
Access: **READ** · toolset amazon_ads · family ads.localization
Amazon Ads API · getLocalizedTargetingExpression · POST /targetingExpression/localize Docs: https://advertising.amazon.com/API/docs/en-us/localization#tag/Targeting-Expression-Localization/operation/getLocalizedTargetingExpression
## Call it
MCP tool call:
```json
{
"name": "ads_get_localized_targeting_expression",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_localized_targeting_expression \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | {requests: [{targetingExpression: {expression: [{type, value}], isForNegativeTargeting: true\|false}}], sourceDetails: {countryCode \| marketplaceId}, targetDetailsList: [{countryCode \| marketplaceId}]}. |
## Result
- Amazon's payload in data.result.
# ads_get_manager_accounts (https://sellersheetai.com/docs/mcp-api/tools/ads_get_manager_accounts)
> List Amazon Ads manager accounts — an agency or brand's umbrella over several advertiser accounts.
Access: **READ** · toolset amazon_ads · family ads.manager-accounts
Most sellers get an empty list; this is normal. Amazon Ads API · getManagerAccountsForUser · GET /managerAccounts Docs: https://advertising.amazon.com/API/docs/en-us/reference/1-0/managerAccount#tag/Manager-Accounts/operation/getManagerAccountsForUser
## Call it
MCP tool call:
```json
{
"name": "ads_get_manager_accounts",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_manager_accounts \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
## Result
- Amazon's payload in data.result.
- `data.result.managerAccounts[]` — {managerAccountId, managerAccountName, linkedAccounts[{accountId, accountName, accountType, profileId, dspAdvertiserId}]} — at most 50 linked accounts shown per manager.
# ads_get_stream_subscription (https://sellersheetai.com/docs/mcp-api/tools/ads_get_stream_subscription)
> Get one Amazon Ads event stream subscription by id.
Access: **READ** · toolset amazon_ads · family ads.marketing-stream
Amazon Ads API · GetStreamSubscription · GET /streams/subscriptions/{subscriptionId} Docs: https://advertising.amazon.com/API/docs/en-us/amazon-marketing-stream/openapi#tag/Stream-Subscription/operation/GetStreamSubscription
## Call it
MCP tool call:
```json
{
"name": "ads_get_stream_subscription",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"subscriptionId": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_stream_subscription \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","subscriptionId":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `subscriptionId` | string | yes | from ads_list_stream_subscriptions. |
## Result
- Amazon's payload in data.result.
# ads_get_targeting_clauses_validation_configs (https://sellersheetai.com/docs/mcp-api/tools/ads_get_targeting_clauses_validation_configs)
> Validation rules Amazon enforces on targeting-clause create — allowed expression types, ASIN/category id formats, bid constraints.
Access: **READ** · toolset amazon_ads · family ads.validation-configurations
Amazon Ads API · getTargetingClausesValidationConfigs · POST /validationConfigurations/targetingClauses Docs: https://advertising.amazon.com/API/docs/en-us/validation-configuration#tag/Validation-Configurations-Retrieval/operation/getTargetingClausesValidationConfigs
## Call it
MCP tool call:
```json
{
"name": "ads_get_targeting_clauses_validation_configs",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_targeting_clauses_validation_configs \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | | optional context — countryCodesList (Amazon's codes: 'UK', not 'GB'), entityTypesList, programTypesList (see Body). Pass all three to get one context instead of the whole set; the answer is under data.result.targetingClausesValidationConfigs. |
## Result
- Amazon's payload in data.result.
## Gotchas
- The payload is large (~200KB+) — filter to the relevant section before writing it anywhere.
# ads_list_ads_accounts (https://sellersheetai.com/docs/mcp-api/tools/ads_list_ads_accounts)
> List the Amazon Ads accounts linked to this store's Ads credentials, each with its per-country profileId and entityId.
Access: **READ** · toolset amazon_ads · family ads.accounts
Amazon Ads API · ListAdsAccounts · POST /adsAccounts/list Docs: https://advertising.amazon.com/API/docs/en-us/account-management#tag/Account/operation/ListAdsAccounts
## Call it
MCP tool call:
```json
{
"name": "ads_list_ads_accounts",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_list_ads_accounts \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | | optional {maxResults, nextToken} — paging only; Amazon has no filters here. |
## Result
- Amazon's payload in data.result.
- `data.result.adsAccounts[]` — {adsAccountId, accountName, status, countryCodes, alternateIds[{countryCode, entityId, profileId}]}.
- `data.result.nextToken` — pass back as body.nextToken.
# ads_list_assets (https://sellersheetai.com/docs/mcp-api/tools/ads_list_assets)
> Sponsored Brands: list a brand's Stores asset library — logos, images, lifestyle imagery, video — every asset tied to the supplied entity id.
Access: **READ** · toolset amazon_ads · family ads.sb3
Amazon Ads API · listAssets · GET /stores/assets Docs: https://advertising.amazon.com/API/docs/en-us/sponsored-brands/3-0/openapi#tag/Stores/operation/listAssets
## Call it
MCP tool call:
```json
{
"name": "ads_list_assets",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"brandEntityId": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_list_assets \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","brandEntityId":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `brandEntityId` | string | yes | the entityId from ads_list_ads_accounts (data.result.adsAccounts[].alternateIds[].entityId for this country) — NOT the brandEntityId from ads_get_brands, which typically returns empty here although Amazon's spec names it. |
| `mediaType` | string | | optional filter; in practice Amazon only accepts 'brandLogo' (every other value, including 'image' from its own schema, 400s "MediaType X is not supported"). Omit it and filter client-side for the complete asset list. Allowed: brandLogo \| image. |
## Result
- Amazon's payload in data.result.
# ads_list_invoices (https://sellersheetai.com/docs/mcp-api/tools/ads_list_invoices)
> List Amazon Ads billing invoices — billing period (fromDate/toDate), amount due, status and the document types available in the advertising console (INVOICE, CREDIT_NOTE), per invo
Access: **READ** · toolset amazon_ads · family ads.billing
ice. There is no download URL in the list. Amazon Ads API · getAdvertiserInvoices · GET /invoices Docs: https://advertising.amazon.com/API/docs/en-us/billing#tag/invoice/operation/getAdvertiserInvoices
## Call it
MCP tool call:
```json
{
"name": "ads_list_invoices",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_list_invoices \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | | optional query params — invoiceStatuses (a list of ISSUED, PAID_IN_PART, PAID_IN_FULL, WRITTEN_OFF), startDate / endDate (inclusive dates as YYYYMMDD — Amazon refuses dashes), count (max 100, default 10; not with cursor), cursor (the previous page's data.result.payload.nextCursor). |
## Result
- Amazon's payload in data.result.
- `data.result.payload.invoiceSummaries[]` — {id, status, fromDate, toDate, amountDue, ...} — id goes to ads_get_invoice (Amazon wraps this answer in `payload`).
- `data.result.payload.nextCursor` — pass back as body.cursor.
## Params (Amazon schema)
- invoiceStatuses: ISSUED | PAID_IN_FULL | PAID_IN_PART | WRITTEN_OFF (list) startDate: string endDate: string count: integer (0–100) cursor: string
# ads_list_stream_subscriptions (https://sellersheetai.com/docs/mcp-api/tools/ads_list_stream_subscriptions)
> List Amazon Ads event stream subscriptions — real-time notifications of campaign state changes, budget events, etc.
Access: **READ** · toolset amazon_ads · family ads.marketing-stream
Most accounts have an empty list; this is normal unless streaming was explicitly configured. Amazon Ads API · ListStreamSubscriptions · GET /streams/subscriptions Docs: https://advertising.amazon.com/API/docs/en-us/amazon-marketing-stream/openapi#tag/Stream-Subscription/operation/ListStreamSubscriptions
## Call it
MCP tool call:
```json
{
"name": "ads_list_stream_subscriptions",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_list_stream_subscriptions \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `max_results` | integer · 1–5000 | | subscriptions per page; omit for Amazon's default. |
| `starting_token` | string | | the cursor from the previous call's data.result.nextToken; omit for the first page. |
## Result
- Amazon's payload in data.result.
- `data.result.subscriptions` — the page.
- `data.result.nextToken` — present when more remain — pass it as starting_token.
# ads_product_metadata (https://sellersheetai.com/docs/mcp-api/tools/ads_product_metadata)
> Get SP product metadata for ASINs or SKUs — title, brand, category, image and advertising eligibility, to check before creating product ads.
Access: **READ** · toolset amazon_ads · family ads.product-selector
Amazon Ads API · ProductMetadata · POST /product/metadata Docs: https://advertising.amazon.com/API/docs/en-us/product-metadata#tag/Product-Selector/operation/ProductMetadata
## Call it
MCP tool call:
```json
{
"name": "ads_product_metadata",
"arguments": {
"store": "myStore-US",
"countryCode": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_product_metadata \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | | ONE of asins / skus / searchStr (max 300 ids; skus work for SP sellers only), adType (required when checkEligibility is true), checkItemDetails / checkEligibility optional bools. Amazon requires pageIndex and pageSize; the server fills 0 and 100 when omitted — pass pageSize up to 300, or page with pageIndex, for more than 100 items. |
## Result
- Amazon's payload in data.result.
## Gotchas
- data.result is an OBJECT, not a list — rows are under data.result.ProductMetadataList.
# ads_update_stream_subscription (https://sellersheetai.com/docs/mcp-api/tools/ads_update_stream_subscription)
> Archive an Amazon Ads event stream subscription — Amazon has no enable/disable for this resource, only ARCHIVED.
Access: **DESTRUCTIVE** · toolset amazon_ads · family ads.marketing-stream
Amazon Ads API · UpdateStreamSubscription · PUT /streams/subscriptions/{subscriptionId} Docs: https://advertising.amazon.com/API/docs/en-us/amazon-marketing-stream/openapi#tag/Stream-Subscription/operation/UpdateStreamSubscription Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_update_stream_subscription",
"arguments": {
"store": "myStore-US",
"countryCode": "",
"subscriptionId": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_update_stream_subscription \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","countryCode":"","subscriptionId":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `countryCode` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `subscriptionId` | string | yes | the subscription to archive. |
| `body` | object | yes | the request body — its fields, enums and required marks are in this parameter's schema. |
## Result
- Amazon's payload in data.result.
# ads_amc_turn_on (https://sellersheetai.com/docs/mcp-api/tools/ads_amc_turn_on)
> Turn Amazon Marketing Cloud (AMC) on for this store's Ads account in one country: finds the advertiser's AMC instance — creating it the first time — and remembers it.
Access: **WRITE** · toolset amazon_ads · family ads.amc-administration
Every other AMC tool needs it on; get_user_context's amc says, per store and country, whether it is. Ask the seller before the first call: an AMC instance cannot be deleted. Calling it again is safe; when AMC is on it only reads. Amazon Ads API · listInstances · GET /amc/instances Amazon Ads API · ListAdsAccounts · POST /adsAccounts/list Docs: https://advertising.amazon.com/API/docs/en-us/amc-administration#tag/Instance-management/operation/listInstances Docs: https://advertising.amazon.com/API/docs/en-us/account-management#tag/Account/operation/ListAdsAccounts Gate: commit — interactive: restate exactly what will happen, wait for a typed CONFIRM; autopilot: only within the seller's instruction and stated limits; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_amc_turn_on",
"arguments": {
"store": "myStore-US",
"country_code": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_amc_turn_on \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). One AMC instance per country of the Ads account. |
## Result
- the orchestrated result described below.
- `data.instance_id` — the store's AMC instance.
- `data.creation_status` — COMPLETED, or IN_PROGRESS while Amazon builds it (up to 5 minutes; call again to finish).
- `data.already_on` — true when nothing was created or looked up at Amazon.
## Gotchas
- Gate: commit — the first call creates an instance at Amazon that cannot be removed.
- The Amazon login that connected Ads must accept the AMC terms once per region (NA, EU, FE) at https://advertising.amazon.com/marketing-cloud; until then the call is refused with error_code amc_terms_not_accepted. Only the seller can do it.
- Amazon offers AMC to advertisers with campaigns live in the last 28 days.
# ads_create_lookalike_audience (https://sellersheetai.com/docs/mcp-api/tools/ads_create_lookalike_audience)
> Create an AMC lookalike audience: Amazon models shoppers similar to a seed the AMC query selects (for example the store's ad clickers) and activates them in the store's sponsored-a
Access: **WRITE** · toolset amazon_ads · family ads.amc-audiences
ds account. Ask the seller first. Amazon Ads API · createLookalikeAudience · POST /amc/audiences/lookalike Docs: https://advertising.amazon.com/API/docs/en-us/amc-rba#tag/Rule-based-audience-lookalike/operation/createLookalikeAudience Gate: commit — interactive: restate exactly what will happen, wait for a typed CONFIRM; autopilot: only within the seller's instruction and stated limits; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_create_lookalike_audience",
"arguments": {
"store": "myStore-US",
"country_code": "",
"audience_name": "",
"sql_query": "",
"time_window_start": "",
"time_window_end": "",
"lookalike_audience_expected_reach": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_lookalike_audience \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","audience_name":"","sql_query":"","time_window_start":"","time_window_end":"","lookalike_audience_expected_reach":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `audience_name` | string | yes | shown in the Ads console; use a new name for each audience. |
| `sql_query` | string | yes | AMC SQL over the *_for_audiences tables whose SELECT returns user_id — the seed, 500 to 500,000 shoppers (count it first with ads_create_workflow_execution). |
| `time_window_start` | string · date-time | yes | UTC 'YYYY-MM-DDTHH:MM:SSZ'. |
| `time_window_end` | string · date-time | yes | UTC 'YYYY-MM-DDTHH:MM:SSZ'. |
| `lookalike_audience_expected_reach` | string | yes | how far from the seed to reach. Allowed: MOST_SIMILAR \| SIMILAR \| BALANCED \| BROAD \| MOST_BROAD. MOST_SIMILAR gives the smallest, closest audience (about 500K–1M shoppers in Europe and the Americas, 200K–300K in Asia); MOST_BROAD the largest. |
| `audience_description` | string | | optional text shown with the audience. |
| `time_window_relative` | boolean | | true to move the seed's window forward at each refresh. |
| `parameter_values` | object | | values for parameters the SQL declares. |
## Result
- `data.audience_execution_id` — poll it with ads_get_query_based_audience_by_audience_execution_id.
- `data.status` — PENDING at first.
## Body (Amazon schema)
- advertiserId*: string audienceDescription: string audienceName*: string countryCode: AE | AU | BR | CA | DE | ES | FR | IN | IT | JP | MX | NL | SA | SE | TR | UK | US inputParameters: [{columnType: DIMENSION | METRIC, dataType*: string | {elementDataType, elementNullable, type} | {precision, type} | {keyDataType, type, valueDataType, valueNullable} | {fields, type}, defaultValue, description, name*}] (max 100) inputParameters.dataType.type: ARRAY | DECIMAL | MAP | STRUCT parameterValues: object query: string refreshRateDays: integer (7–21; default 21) timeWindowEnd*: string (date-time) timeWindowRelative: boolean (default False) timeWindowStart*: string (date-time) workflowId: string lookalikeAudienceExpectedReach*: string
## Gotchas
- Gate: commit — the audience goes to the seller's ads account and cannot be changed.
- Only the lookalike is created, not a copy of the seed.
- A seed that clears 500 in an AMC count can still FAIL after about 20 minutes with "did
- not find a sufficient match for seed users" (measured: 716 ad clickers over 28 days) —
- Amazon keeps only shoppers it can match; seed broadly (reach, or a longer window).
# ads_create_query_based_audience (https://sellersheetai.com/docs/mcp-api/tools/ads_create_query_based_audience)
> Create an AMC rule-based audience: the shoppers an AMC query selects become an audience in the store's sponsored-ads account — a Sponsored Products / Brands bid adjustment (bidAdju
Access: **WRITE** · toolset amazon_ads · family ads.amc-audiences
stments.audienceBidAdjustments in ads_update_campaign) or a Sponsored Display target. Ask the seller first: an audience cannot be edited once created. Amazon Ads API · createQueryBasedAudience · POST /amc/audiences/query Docs: https://advertising.amazon.com/API/docs/en-us/amc-rba#tag/Rule-based-audience/operation/createQueryBasedAudience Gate: commit — interactive: restate exactly what will happen, wait for a typed CONFIRM; autopilot: only within the seller's instruction and stated limits; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_create_query_based_audience",
"arguments": {
"store": "myStore-US",
"country_code": "",
"audience_name": "",
"sql_query": "",
"time_window_start": "",
"time_window_end": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_query_based_audience \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","audience_name":"","sql_query":"","time_window_start":"","time_window_end":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `audience_name` | string | yes | shown in the Ads console; use a new name for each audience. |
| `sql_query` | string | yes | AMC SQL over the *_for_audiences tables (sponsored_ads_traffic_for_audiences, conversions_for_audiences, …) whose SELECT returns user_id. |
| `time_window_start` | string · date-time | yes | UTC 'YYYY-MM-DDTHH:MM:SSZ'. |
| `time_window_end` | string · date-time | yes | UTC 'YYYY-MM-DDTHH:MM:SSZ'. |
| `audience_description` | string | | optional text shown with the audience. |
| `time_window_relative` | boolean | | true to move the window forward at each refresh (recent shoppers). |
| `parameter_values` | object | | values for parameters the SQL declares. |
## Result
- `data.audience_execution_id` — poll it with ads_get_query_based_audience_by_audience_execution_id.
- `data.status` — PENDING at first.
## Body (Amazon schema)
- advertiserId*: string audienceDescription: string audienceName*: string countryCode: AE | AU | BR | CA | DE | ES | FR | IN | IT | JP | MX | NL | SA | SE | TR | UK | US inputParameters: [{columnType: DIMENSION | METRIC, dataType*: string | {elementDataType, elementNullable, type} | {precision, type} | {keyDataType, type, valueDataType, valueNullable} | {fields, type}, defaultValue, description, name*}] (max 100) inputParameters.dataType.type: ARRAY | DECIMAL | MAP | STRUCT parameterValues: object query: string refreshRateDays: integer (0–21; default 21) timeWindowEnd*: string (date-time) timeWindowRelative: boolean (default False) timeWindowStart*: string (date-time) workflowId: string
## Gotchas
- Gate: commit — the audience goes to the seller's ads account and cannot be changed.
- The advertiser is the store's AMC instance's own; it is not a parameter.
- Amazon refreshes the audience itself; one left unused in campaigns is refreshed less often and deactivated after about 100 days.
## Workflow
- 1. Count the shoppers first with ads_create_workflow_execution (SELECT COUNT(DISTINCT user_id) … over the same tables without _for_audiences); Amazon fails an audience under 2,000 (aim for 2,500). 2. Create it here; poll ads_get_query_based_audience_by_audience_execution_id. 3. When it SUCCEEDED, find its audienceId with ads_list_targetable_entities.
# ads_create_schedule (https://sellersheetai.com/docs/mcp-api/tools/ads_create_schedule)
> Run a saved AMC workflow on a schedule — Daily or Weekly — on the store's instance.
Access: **WRITE** · toolset amazon_ads · family ads.amc-reporting
Each run appears in ads_list_workflow_executions (filter by its workflow_id). Ask the seller first. Amazon Ads API · createSchedule · POST /amc/reporting/{instanceId}/schedules Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Schedules/operation/createSchedule Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_create_schedule",
"arguments": {
"store": "myStore-US",
"country_code": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_schedule \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | the request body — its fields, enums and required marks are in this parameter's schema. scheduleId, workflowId (a saved workflow) and aggregationPeriod are needed; scheduleEnabled false saves it paused. The marketplace is the store's. |
## Result
- `data.schedule_id` — the schedule's id.
- `data.workflow_id` — the workflow it runs.
## Gotchas
- A run's result can be downloaded for about a day; read each run in time.
- A synced report's schedule or workflow (data.synced_ids of the two list tools) is refused.
# ads_create_workflow (https://sellersheetai.com/docs/mcp-api/tools/ads_create_workflow)
> Save an AMC query on the store's instance under an id of your choosing, so a schedule (ads_create_schedule) can run it every day or week.
Access: **WRITE** · toolset amazon_ads · family ads.amc-reporting
Ask the seller first. Amazon Ads API · createWorkflow · POST /amc/reporting/{instanceId}/workflows Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Workflows/operation/createWorkflow Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_create_workflow",
"arguments": {
"store": "myStore-US",
"country_code": "",
"body": {}
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_workflow \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","body":{}}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `body` | object | yes | the request body — its fields, enums and required marks are in this parameter's schema. workflowId (letters, digits, '_', '-', '.') and sqlQuery are required; the SQL is the same AMC SQL as ads_create_workflow_execution's. |
## Result
- `data.workflow_id` — the saved workflow's id.
## Gotchas
- A synced report's workflow (data.synced_ids of ads_list_workflows) is refused.
- Check the SQL first with ads_create_workflow_execution (dry_run true).
# ads_create_workflow_execution (https://sellersheetai.com/docs/mcp-api/tools/ads_create_workflow_execution)
> Run an AMC SQL query over the store's AMC data (an ad-hoc execution).
Access: **READ** · toolset amazon_ads · family ads.amc-reporting
Answers at once with an execution id; poll ads_get_workflow_execution, then read the rows with ads_get_workflow_execution_download_urls. Check a new query with dry_run first: AMC validates it in seconds without running it. Amazon Ads API · createWorkflowExecution · POST /amc/reporting/{instanceId}/workflowExecutions Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Workflow-executions/operation/createWorkflowExecution
## Call it
MCP tool call:
```json
{
"name": "ads_create_workflow_execution",
"arguments": {
"store": "myStore-US",
"country_code": "",
"sql_query": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_create_workflow_execution \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","sql_query":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `sql_query` | string | yes | AMC SQL; line breaks are joined into one line for Amazon. The final SELECT must aggregate (GROUP BY dimensions, SUM / COUNT(DISTINCT user_id)). |
| `time_window_type` | string | | which days of data the query reads; EXPLICIT needs time_window_start and time_window_end. Amazon's default is MOST_RECENT_DAY. Allowed: ALL \| CURRENT_MONTH \| EXPLICIT \| MOST_RECENT_DAY \| MOST_RECENT_WEEK \| PREVIOUS_MONTH. Allowed: ALL \| CURRENT_MONTH \| EXPLICIT \| MOST_RECENT_DAY \| MOST_RECENT_WEEK \| PREVIOUS_MONTH. |
| `time_window_start` | string | | EXPLICIT only — 'YYYY-MM-DDTHH:MM:SS'. |
| `time_window_end` | string | | EXPLICIT only — 'YYYY-MM-DDTHH:MM:SS', exclusive. |
| `time_window_time_zone` | string | | the window's IANA zone, e.g. 'Asia/Dubai' (the marketplace's own day); default UTC. |
| `parameter_values` | object | | values for parameters the SQL declares. |
| `dry_run` | boolean | | true to validate the SQL and the time window only — nothing is computed, no Amazon quota is used; the run then ends SUCCEEDED (valid, no rows) or REJECTED with Amazon's reason. |
## Result
- `data.workflow_execution_id` — pass to ads_get_workflow_execution.
- `data.status` — PENDING at first.
## Body (Amazon schema)
- timeWindowType: ALL | CURRENT_MONTH | EXPLICIT | MOST_RECENT_DAY | MOST_RECENT_WEEK | PREVIOUS_MONTH + 15 more: additionalAcrResultsReceivers, advertisers, disableAggregationControls, dryRun, maxCertifiedTime, maxDimensionTime, parameterValues, requireSyntheticData, skipPublish, timeWindowEnd, timeWindowStart, timeWindowTimeZone, workflow, workflowExecutionTimeoutSeconds, workflowId Full schema: the Docs link above.
## Gotchas
- Gate: none — a report request; it reads the advertiser's own AMC data.
- AMC runs at most 10 queries at a time per instance; wait for one to finish before starting more.
- For numbers that no longer change, query amazon_attributed_events_by_conversion_time: its window is complete once it ends. The by_traffic_time table (the SP console's view) keeps adding purchases for up to 30 days after the window.
- A SQL keyword as a column alias (`hour`, `date`) is REJECTED as unparsable.
- Outputting user_id or another VERY_HIGH column is REJECTED.
- spend is in microcents: divide by 100,000,000 for the currency.
- For Sponsored Products the detail_page_view / add_to_cart columns of the attributed-events tables are 0; join the clickers in sponsored_ads_traffic to `conversions` (event_subtype 'shoppingCart') on user_id instead.
# ads_delete_query_based_audience_by_audience_execution_id (https://sellersheetai.com/docs/mcp-api/tools/ads_delete_query_based_audience_by_audience_execution_id)
> Delete an AMC audience (FAILED or SUCCEEDED) and its segment in the sponsored-ads account.
Access: **DESTRUCTIVE** · toolset amazon_ads · family ads.amc-audiences
Ask the seller first: it cannot be undone. Amazon Ads API · deleteQueryBasedAudienceByAudienceExecutionId · DELETE /amc/audiences/query/{audienceExecutionId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-rba#tag/Rule-based-audience/operation/deleteQueryBasedAudienceByAudienceExecutionId Gate: commit — interactive: restate exactly what will happen, wait for a typed CONFIRM; autopilot: only within the seller's instruction and stated limits; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_delete_query_based_audience_by_audience_execution_id",
"arguments": {
"store": "myStore-US",
"country_code": "",
"audience_execution_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_delete_query_based_audience_by_audience_execution_id \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","audience_execution_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `audience_execution_id` | string | yes | the audience's data.audience_execution_id. |
## Result
- `data.deleted` — true when Amazon removed it.
## Gotchas
- Gate: commit — irreversible.
- Take it out of every campaign first: Amazon refuses an audience it sees in use, but only on a best-effort check.
# ads_delete_schedule (https://sellersheetai.com/docs/mcp-api/tools/ads_delete_schedule)
> Delete an AMC schedule from the store's instance; its workflow stays saved.
Access: **DESTRUCTIVE** · toolset amazon_ads · family ads.amc-reporting
Ask the seller first. Amazon Ads API · deleteSchedule · DELETE /amc/reporting/{instanceId}/schedules/{scheduleId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Schedules/operation/deleteSchedule Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_delete_schedule",
"arguments": {
"store": "myStore-US",
"country_code": "",
"schedule_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_delete_schedule \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","schedule_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `schedule_id` | string | yes | the schedule's id. |
## Result
- `data.deleted` — true when Amazon removed it.
## Gotchas
- A synced report's schedule (data.synced_ids of ads_list_schedules) is refused: SellerSheet removes its own when the store leaves it.
# ads_delete_workflow (https://sellersheetai.com/docs/mcp-api/tools/ads_delete_workflow)
> Delete a saved AMC query from the store's instance.
Access: **DESTRUCTIVE** · toolset amazon_ads · family ads.amc-reporting
Ask the seller first. Amazon Ads API · deleteWorkflow · DELETE /amc/reporting/{instanceId}/workflows/{workflowId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Workflows/operation/deleteWorkflow Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask.
## Call it
MCP tool call:
```json
{
"name": "ads_delete_workflow",
"arguments": {
"store": "myStore-US",
"country_code": "",
"workflow_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_delete_workflow \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","workflow_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `workflow_id` | string | yes | the saved workflow's id. |
## Result
- `data.deleted` — true when Amazon removed it.
## Gotchas
- Its past runs stay, but it cannot be run by id again.
- Delete the schedules that run it first (ads_list_schedules names their workflowId).
- A synced report's workflow (data.synced_ids of ads_list_workflows) is refused.
# ads_get_all_query_based_audiences_by_instance_id (https://sellersheetai.com/docs/mcp-api/tools/ads_get_all_query_based_audiences_by_instance_id)
> List the AMC audiences of the store's instance — rule-based and lookalike, made by these tools or in the AMC console — with their status and size.
Access: **READ** · toolset amazon_ads · family ads.amc-audiences
Amazon Ads API · getAllQueryBasedAudiencesByInstanceId · GET /amc/audiences/query Docs: https://advertising.amazon.com/API/docs/en-us/amc-rba#tag/Rule-based-audience/operation/getAllQueryBasedAudiencesByInstanceId
## Call it
MCP tool call:
```json
{
"name": "ads_get_all_query_based_audiences_by_instance_id",
"arguments": {
"store": "myStore-US",
"country_code": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_all_query_based_audiences_by_instance_id \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `max_results` | integer · 1–100 | | audiences per page, 1–100 (Amazon's default 100). |
| `next_token` | string | | the cursor from the previous call's data.nextToken; omit for the first page. |
## Result
- `data.audiences[]` — {audience_execution_id, audience_name, audience_type (RULE_BASED | LOOKALIKE), status (PENDING | RUNNING | SUCCEEDED | FAILED | DEACTIVATED), status_reason, audience_count, deletable, create_time, last_refreshed_time, query}.
- `data.nextToken` — set when more audiences remain.
# ads_get_data_source (https://sellersheetai.com/docs/mcp-api/tools/ads_get_data_source)
> One AMC table's columns, each with its type and privacy class — read it before writing SQL against a table you have not used.
Access: **READ** · toolset amazon_ads · family ads.amc-reporting
Amazon Ads API · getDataSource · GET /amc/reporting/{instanceId}/dataSources/{dataSourceId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Data-sources/operation/getDataSource
## Call it
MCP tool call:
```json
{
"name": "ads_get_data_source",
"arguments": {
"store": "myStore-US",
"country_code": "",
"data_source_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_data_source \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","data_source_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `data_source_id` | string | yes | the table name from ads_list_data_sources, e.g. 'sponsored_ads_traffic' or 'conversions'. |
## Result
- `data.columns[]` — {name, data_type, column_type (DIMENSION | METRIC), sensitivity (NONE | LOW | MEDIUM | HIGH | VERY_HIGH | INTERNAL), min_distinct_users, description}.
## Gotchas
- A VERY_HIGH column (user_id, ip_address) can never be in the final SELECT — use it inside COUNT(DISTINCT …) or a join only.
- A result row whose dimension values cover fewer shoppers than min_distinct_users comes back with those dimensions blank; its metrics stay.
# ads_get_query_based_audience_by_audience_execution_id (https://sellersheetai.com/docs/mcp-api/tools/ads_get_query_based_audience_by_audience_execution_id)
> One AMC audience's status — poll it after creating one.
Access: **READ** · toolset amazon_ads · family ads.amc-audiences
SUCCEEDED means Amazon has sent it to the store's sponsored-ads account, where it appears within 2–24 hours; ads_list_targetable_entities then gives the audienceId campaigns take. Amazon Ads API · getQueryBasedAudienceByAudienceExecutionId · GET /amc/audiences/query/{audienceExecutionId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-rba#tag/Rule-based-audience/operation/getQueryBasedAudienceByAudienceExecutionId
## Call it
MCP tool call:
```json
{
"name": "ads_get_query_based_audience_by_audience_execution_id",
"arguments": {
"store": "myStore-US",
"country_code": "",
"audience_execution_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_query_based_audience_by_audience_execution_id \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","audience_execution_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `audience_execution_id` | string | yes | data.audience_execution_id from a create, or from ads_get_all_query_based_audiences_by_instance_id. |
## Result
- `data.audience` — {audience_execution_id, audience_name, audience_type, status, status_reason, audience_count, deletable, time_window_start, time_window_end, query}.
## Gotchas
- FAILED comes back as an error notification carrying Amazon's status_reason — most often fewer than 2,000 shoppers, or a table without the _for_audiences suffix. Fix it with ads_update_query_based_audience_by_audience_execution_id or delete it.
- DEACTIVATED: the audience has no members any more (unused for long, or refresh off).
# ads_get_schedule (https://sellersheetai.com/docs/mcp-api/tools/ads_get_schedule)
> Read one AMC schedule on the store's instance: the workflow it runs, its period and whether it is enabled.
Access: **READ** · toolset amazon_ads · family ads.amc-reporting
Amazon Ads API · getSchedule · GET /amc/reporting/{instanceId}/schedules/{scheduleId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Schedules/operation/getSchedule
## Call it
MCP tool call:
```json
{
"name": "ads_get_schedule",
"arguments": {
"store": "myStore-US",
"country_code": "",
"schedule_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_schedule \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","schedule_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `schedule_id` | string | yes | the schedule's id (data.schedules[].scheduleId). |
## Result
- `data.schedule` — Amazon's schedule — {scheduleId, workflowId, aggregationPeriod, aggregationStartDay, aggregationHourUtc, scheduleEnabled, …}.
# ads_get_workflow (https://sellersheetai.com/docs/mcp-api/tools/ads_get_workflow)
> Read one saved AMC query (workflow) on the store's instance: its SQL, parameters and output settings.
Access: **READ** · toolset amazon_ads · family ads.amc-reporting
Amazon Ads API · getWorkflow · GET /amc/reporting/{instanceId}/workflows/{workflowId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Workflows/operation/getWorkflow
## Call it
MCP tool call:
```json
{
"name": "ads_get_workflow",
"arguments": {
"store": "myStore-US",
"country_code": "",
"workflow_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_workflow \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","workflow_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `workflow_id` | string | yes | the saved workflow's id (data.workflows[].workflowId). |
## Result
- `data.workflow` — Amazon's workflow — {workflowId, sqlQuery, inputParameters, …}.
# ads_get_workflow_execution (https://sellersheetai.com/docs/mcp-api/tools/ads_get_workflow_execution)
> The status of an AMC query from ads_create_workflow_execution.
Access: **READ** · toolset amazon_ads · family ads.amc-reporting
Poll every 15–30 seconds; most queries finish within two minutes. Amazon Ads API · getWorkflowExecution · GET /amc/reporting/{instanceId}/workflowExecutions/{workflowExecutionId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Workflow-executions/operation/getWorkflowExecution
## Call it
MCP tool call:
```json
{
"name": "ads_get_workflow_execution",
"arguments": {
"store": "myStore-US",
"country_code": "",
"workflow_execution_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_workflow_execution \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","workflow_execution_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `workflow_execution_id` | string | yes | data.workflow_execution_id from ads_create_workflow_execution. |
## Result
- `data.status` — SUCCEEDED when the rows are ready; PENDING or RUNNING while AMC works; REJECTED when AMC refused the SQL (a privacy rule or a syntax error — Amazon answers it although its spec omits it), FAILED or CANCELLED otherwise.
- `data.status_reason` — Amazon's sentence when REJECTED or FAILED — fix the SQL by it.
- `data.output_columns[]` — {name, column_type, data_type} once validated.
## Params (Amazon schema)
- instanceId*: string workflowExecutionId*: string includeWorkflow: boolean
# ads_get_workflow_execution_download_urls (https://sellersheetai.com/docs/mcp-api/tools/ads_get_workflow_execution_download_urls)
> The finished result of an AMC query as rows: the tool downloads Amazon's result file and returns its rows (no download links).
Access: **READ** · toolset amazon_ads · family ads.amc-reporting
Only for a SUCCEEDED query. Amazon Ads API · getWorkflowExecutionDownloadUrls · GET /amc/reporting/{instanceId}/workflowExecutions/{workflowExecutionId}/downloadUrls Amazon Ads API · getWorkflowExecution · GET /amc/reporting/{instanceId}/workflowExecutions/{workflowExecutionId} Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Workflow-executions/operation/getWorkflowExecutionDownloadUrls Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Workflow-executions/operation/getWorkflowExecution
## Call it
MCP tool call:
```json
{
"name": "ads_get_workflow_execution_download_urls",
"arguments": {
"store": "myStore-US",
"country_code": "",
"workflow_execution_id": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_get_workflow_execution_download_urls \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":"","workflow_execution_id":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `workflow_execution_id` | string | yes | data.workflow_execution_id from ads_create_workflow_execution. |
| `max_rows` | integer | | rows to return, 1–10000 (default 1000); every row is still counted in data.row_count. |
## Result
- the orchestrated result described below.
- `data.columns` — the result's column names.
- `data.rows[]` — one dict per row; every value is a string, as in Amazon's CSV.
- `data.row_count` — the result's rows; data.returned_rows: the rows in data.rows.
- `data.row_count_complete` — false when the result is over 20 MB — row_count then counts only the rows read; aggregate more and run it again.
- `data.truncated` — true when data.rows holds fewer rows than the result.
- `data.hidden_rows` — rows, of the whole result, whose group columns are blank — AMC hides a group with too few shoppers (an empty value looks the same); their metrics still add up; group more broadly to see them.
## Gotchas
- AMC `purchases` counts the advertised product only; `total_purchases` adds the brand's other products (what the Ads reports call purchases).
# ads_list_data_sources (https://sellersheetai.com/docs/mcp-api/tools/ads_list_data_sources)
> List the AMC tables the store's instance can query — sponsored_ads_traffic, conversions, amazon_attributed_events_by_conversion_time and the rest — with their column counts.
Access: **READ** · toolset amazon_ads · family ads.amc-reporting
ads_get_data_source gives a table's columns and privacy classes. Amazon Ads API · listDataSources · GET /amc/reporting/{instanceId}/dataSources Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Data-sources/operation/listDataSources
## Call it
MCP tool call:
```json
{
"name": "ads_list_data_sources",
"arguments": {
"store": "myStore-US",
"country_code": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_list_data_sources \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `-` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `country_code` | string | yes | the Ads profile's 2-letter country code (e.g. 'US'). |
| `next_token` | string | | the cursor from the previous call's data.nextToken; omit for the first page. |
| `limit` | integer | | tables per page, 1–100 (Amazon's default 100). |
## Result
- `data.data_sources[]` — {data_source_id, description, columns}.
- `data.nextToken` — set when more tables remain.
# ads_list_schedules (https://sellersheetai.com/docs/mcp-api/tools/ads_list_schedules)
> List the AMC schedules on the store's instance — each runs a saved workflow Daily or Weekly.
Access: **READ** · toolset amazon_ads · family ads.amc-reporting
SellerSheet's synced reports appear too (named in data.synced_ids — read-only here). Amazon Ads API · listSchedules · GET /amc/reporting/{instanceId}/schedules Docs: https://advertising.amazon.com/API/docs/en-us/amc-reporting#tag/Schedules/operation/listSchedules
## Call it
MCP tool call:
```json
{
"name": "ads_list_schedules",
"arguments": {
"store": "myStore-US",
"country_code": ""
}
}
```
Tool API (early access — contact us):
```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_list_schedules \
-H "Authorization: Bearer $SELLERSHEET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"store":"myStore-US","country_code":""}'
```
## Arguments
| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `