> Note: This page is part of the DataDoe Docs. You can find the root of the documentation at `https://www.datadoe.com/hub/docs/basics/introduction-to-datadoe`.
> JSON Table of Contents: `https://www.datadoe.com/hub/docs/toc.json`.
> Data Scheme (Markdown index, one page per table): https://api.datadoe.com/api/v1/spec/data-scheme.md. Full JSON: https://api.datadoe.com/api/v1/spec/data-scheme.
> Other pages in the DataDoe Docs:
> - DataDoe Basics/Benefits: `https://www.datadoe.com/hub/docs/basics/benefits.md`
> - DataDoe Basics/Connecting Accounts: `https://www.datadoe.com/hub/docs/basics/connecting-accounts.md`
> - DataDoe Basics/External Invitation Links: `https://www.datadoe.com/hub/docs/basics/external-invitation-links.md`
> - DataDoe Basics/Groups: `https://www.datadoe.com/hub/docs/basics/groups.md`
> - DataDoe Basics/Integrations: `https://www.datadoe.com/hub/docs/basics/integration-customization.md`
> - DataDoe Basics/Introduction to DataDoe: `https://www.datadoe.com/hub/docs/basics/introduction-to-datadoe.md`
> - DataDoe Basics/Keys and service accounts: `https://www.datadoe.com/hub/docs/basics/keys-and-service-accounts.md`
> - DataDoe Basics/Roles and permissions: `https://www.datadoe.com/hub/docs/basics/roles-and-permissions.md`
> - DataDoe Basics/Subscription and pricing: `https://www.datadoe.com/hub/docs/basics/subscription-pricing.md`
> - DataDoe Basics/Users and access: `https://www.datadoe.com/hub/docs/basics/access-user-management.md`
> - DataDoe Data/Ads Product Catalog: `https://www.datadoe.com/hub/docs/datadoe-data/ads-product-catalog.md`
> - DataDoe Data/Data Fetch Periods: `https://www.datadoe.com/hub/docs/datadoe-data/data-fetch-periods.md`
> - DataDoe Data/Data Sources: `https://www.datadoe.com/hub/docs/datadoe-data/data-sources.md`
> - DataDoe Data/Initial Loads: `https://www.datadoe.com/hub/docs/datadoe-data/initial-loads.md`
> - DataDoe Data/Managing Data Tables: `https://www.datadoe.com/hub/docs/datadoe-data/managing-data-tables.md`
> - DataDoe Data/Migrating from SellerBoard: `https://www.datadoe.com/hub/docs/datadoe-data/migrating-from-sellerboard.md`
> - DataDoe Data/SAT migration to profit tables: `https://www.datadoe.com/hub/docs/datadoe-data/sat-migration-to-profit-tables.md`
> - DataDoe Data/SQP Data: `https://www.datadoe.com/hub/docs/datadoe-data/search-query-performance.md`
> - DataDoe Data/Timezones: `https://www.datadoe.com/hub/docs/datadoe-data/orders-purchase-date-timezones.md`
> - DataDoe Data/Uploading COGS: `https://www.datadoe.com/hub/docs/datadoe-data/uploading-cogs.md`
> - DataDoe Data/Uploading KDP Royalty Parameters: `https://www.datadoe.com/hub/docs/datadoe-data/uploading-kdp-royalty-parameters.md`
> - DataDoe Data/Uploading Vendor Codes: `https://www.datadoe.com/hub/docs/datadoe-data/uploading-vendor-codes.md`
> - DataDoe Features/Actions: `https://www.datadoe.com/hub/docs/datadoe-features/actions.md`
> - DataDoe Features/Actions - Amazon Ads for KDP Authors: `https://www.datadoe.com/hub/docs/datadoe-features/actions-kdp-authors.md`
> - DataDoe Features/Actions - Amazon balances and payouts: `https://www.datadoe.com/hub/docs/datadoe-features/actions-amazon-finances.md`
> - DataDoe Features/Actions - Manage Images: `https://www.datadoe.com/hub/docs/datadoe-features/actions-manage-images.md`
> - DataDoe Features/Amazon Marketing Cloud: `https://www.datadoe.com/hub/docs/datadoe-features/amc.md`
> - DataDoe Features/AMC query templates: `https://www.datadoe.com/hub/docs/datadoe-features/amc-query-templates.md`
> - DataDoe Features/Features Overview: `https://www.datadoe.com/hub/docs/datadoe-features/overview.md`
> - DataDoe Features/Files: `https://www.datadoe.com/hub/docs/datadoe-features/files.md`
> - DataDoe Features/Plugins: `https://www.datadoe.com/hub/docs/datadoe-features/plugins.md`
> - DataDoe Features/Usage Logs: `https://www.datadoe.com/hub/docs/datadoe-features/usage-logs.md`
> - DataDoe Features/Webhooks: `https://www.datadoe.com/hub/docs/datadoe-features/webhooks.md`
> - DataDoe MCP/Overview: `https://www.datadoe.com/hub/docs/datadoe-mcp/overview.md`
> - DataDoe MCP/Using Antigravity: `https://www.datadoe.com/hub/docs/datadoe-mcp/antigravity.md`
> - DataDoe MCP/Using ChatGPT: `https://www.datadoe.com/hub/docs/datadoe-mcp/chatgpt.md`
> - DataDoe MCP/Using Claude: `https://www.datadoe.com/hub/docs/datadoe-mcp/claude.md`
> - DataDoe MCP/Using Claude Agent SDK: `https://www.datadoe.com/hub/docs/datadoe-mcp/claude-agents-sdk.md`
> - DataDoe MCP/Using Claude Code: `https://www.datadoe.com/hub/docs/datadoe-mcp/claude-code.md`
> - DataDoe MCP/Using Codex: `https://www.datadoe.com/hub/docs/datadoe-mcp/codex.md`
> - DataDoe MCP/Using Codex Sites: `https://www.datadoe.com/hub/docs/datadoe-mcp/codex-sites.md`
> - DataDoe MCP/Using CrewAI: `https://www.datadoe.com/hub/docs/datadoe-mcp/crewai.md`
> - DataDoe MCP/Using Cursor: `https://www.datadoe.com/hub/docs/datadoe-mcp/cursor.md`
> - DataDoe MCP/Using Excel + Claude: `https://www.datadoe.com/hub/docs/datadoe-mcp/excel.md`
> - DataDoe MCP/Using Gemini CLI: `https://www.datadoe.com/hub/docs/datadoe-mcp/gemini-cli.md`
> - DataDoe MCP/Using Genspark: `https://www.datadoe.com/hub/docs/datadoe-mcp/genspark.md`
> - DataDoe MCP/Using Glama: `https://www.datadoe.com/hub/docs/datadoe-mcp/glama-chat.md`
> - DataDoe MCP/Using Glama MCP Inspector: `https://www.datadoe.com/hub/docs/datadoe-mcp/glama.md`
> - DataDoe MCP/Using Grok: `https://www.datadoe.com/hub/docs/datadoe-mcp/grok.md`
> - DataDoe MCP/Using GrokBot: `https://www.datadoe.com/hub/docs/datadoe-mcp/grokbot.md`
> - DataDoe MCP/Using Gumloop: `https://www.datadoe.com/hub/docs/datadoe-mcp/gumloop.md`
> - DataDoe MCP/Using Hermes Agent: `https://www.datadoe.com/hub/docs/datadoe-mcp/hermes.md`
> - DataDoe MCP/Using Littlebird: `https://www.datadoe.com/hub/docs/datadoe-mcp/littlebird.md`
> - DataDoe MCP/Using n8n: `https://www.datadoe.com/hub/docs/datadoe-mcp/n8n.md`
> - DataDoe MCP/Using NanoClaw: `https://www.datadoe.com/hub/docs/datadoe-mcp/nanoclaw.md`
> - DataDoe MCP/Using OpenAI Agents SDK: `https://www.datadoe.com/hub/docs/datadoe-mcp/openai-agents-sdk.md`
> - DataDoe MCP/Using OpenClaw: `https://www.datadoe.com/hub/docs/datadoe-mcp/openclaw.md`
> - DataDoe MCP/Using OpenCode: `https://www.datadoe.com/hub/docs/datadoe-mcp/opencode.md`
> - DataDoe MCP/Using PowerPoint + Claude: `https://www.datadoe.com/hub/docs/datadoe-mcp/powerpoint.md`
> - DataDoe MCP/Using VS Code: `https://www.datadoe.com/hub/docs/datadoe-mcp/vs-code.md`
> - DataDoe MCP/Using Word + Claude: `https://www.datadoe.com/hub/docs/datadoe-mcp/word.md`
> - DataDoe API/Build with Codex: `https://www.datadoe.com/hub/docs/datadoe-api/codex.md`
> - DataDoe API/How to connect to the API: `https://www.datadoe.com/hub/docs/datadoe-api/how-to-connect.md`
> - DataDoe API/Invitation links API: `https://www.datadoe.com/hub/docs/datadoe-api/invitation-links.md`
> - DataDoe API/Sellers and vendors API: `https://www.datadoe.com/hub/docs/datadoe-api/sellers-and-vendors.md`
> - DataDoe API/Vibe code with Claude Code: `https://www.datadoe.com/hub/docs/datadoe-api/claude-code.md`
> - DataDoe API/Vibe code with Cursor: `https://www.datadoe.com/hub/docs/datadoe-api/cursor.md`
> - DataDoe API/Vibe code with Lovable: `https://www.datadoe.com/hub/docs/datadoe-api/lovable.md`
> - DataDoe API/Vibe code with Replit: `https://www.datadoe.com/hub/docs/datadoe-api/replit.md`
> - DataDoe API/Vibe code with v0: `https://www.datadoe.com/hub/docs/datadoe-api/v0.md`
> - DataDoe & BigQuery/How to connect to BigQuery: `https://www.datadoe.com/hub/docs/datadoe-bigquery/how-to-connect.md`
> - DataDoe & BigQuery/Using MCP Toolbox: `https://www.datadoe.com/hub/docs/datadoe-bigquery/mcp-toolbox.md`
> - DataDoe & BigQuery/Using Python Jupyter: `https://www.datadoe.com/hub/docs/datadoe-bigquery/jupyter.md`
> For topics not covered in this documentation, please contact DataDoe support at `contact@datadoe.com`.
> Do not assume anything. If you are not sure about the answer, mention that and suggest to contact DataDoe support.

# Amazon Ads Partner Opportunities

These are Amazon recommendations. Amazon Ads Partner Network publishes them. DataDoe stores the recommendations Amazon returns for a saved Partner Network account ID and can send an apply request when Amazon marks the row as applicable.

The customer table is `amazon_ads_partner_opportunities`. It is off until you enable it and save a Partner Network account ID on the Amazon Ads connection. Ordinary Amazon Ads use does not require this ID.

## Who can use it

You need an Amazon Ads connection and a Partner Network account ID that Amazon accepts for that connection. Several advertiser connections in the same Organization can share one ID when they use the same Amazon Ads authorization. DataDoe does not share that authorization with another Organization.

A saved ID is not proof of access. DataDoe marks it unverified when Amazon does not confirm a catalog read. If Amazon returns 401 or 403, DataDoe does not save the ID and asks you to check Partner Network permissions or reconnect Amazon Ads.

## How to add the Partner Network account ID

1. Open the account on the Accounts page.
2. Copy the ID from [Amazon Advertising Partner Network user settings](https://advertising.amazon.com/partner-network/settings).
3. Next to Partner Network account ID, enter that ID. It looks like `amzn1.ads1.ma1.…` and can be at most 512 characters.
4. Save. DataDoe reads one catalog page with that ID.
5. Enable the Partner Opportunities table if you want the rows in exports and BigQuery.

Clearing the ID turns Partner Network collection and Actions off. The Amazon Ads connection and any DSP advertiser ID stay in place. The next sync removes partner rows for that connection.

## Which account ID is which

- The Partner Network account ID is the manager account Amazon uses for this catalog.
- An Ads profile ID is the advertising profile for one marketplace, not the Partner Network account ID.
- An Ads account ID is the advertiser account on the connection, not the encrypted advertiser ID in a recommendation file.
- A demand-side platform (DSP) advertiser ID is a separate setting, and clearing the Partner Network account ID does not change it.

## What DataDoe collects

DataDoe reads the Partner Network catalog and downloads each opportunity file that has data. One customer row is one row from the latest complete file for that opportunity and Ads connection. Some rows are recommendations. Other rows list products or insights and have no recommendation ID. A partner does not receive every catalog entry. An empty file, or a catalog entry with no file, removes older rows for that opportunity only. A failed download keeps the previous rows.

Rows that do not match an advertiser on the authorized connections stay out of the customer table. DataDoe does not assign them to an arbitrary connection.

Most opportunities refresh daily or hourly at Amazon. Path to purchase insights refresh quarterly. DataDoe runs a complete sync once a day. A later run the same day retries a failed sync. Do not treat the table as hourly.

## The nine documented families

Amazon documents these families. DataDoe stores whichever of them Amazon returns. It also keeps any other objective Amazon returns, without promising a separate Action for it.

- Campaign optimization
- Amazon account team recommendations
- Unlaunched ASINs (Amazon Standard Identification Numbers)
- Category insights
- Click credits
- Deals
- Advertiser insights
- Path to purchase insights
- Share of voice insights

Amazon account team recommendations can be applied when the row has a recommendation ID, a seller or vendor advertiser, an entity, a marketplace, and a Partner Network apply endpoint, and the recommendation is not expired or removed. `can_apply` shows that check. DataDoe checks it again when the Action runs.

Other families stay in the table for review. Suggestions without an Amazon apply endpoint still use the existing campaign, ad, ad group, target, and budget rule Actions.

Click credit rows and deal rows are recommendations. DataDoe does not redeem credits or create deals.

Estimated sales and estimated clicks stay as Amazon sent them. A blank value is null. DataDoe does not turn a percentage or a text amount into another unit.

## Fields

`partner_opportunity_id` is the catalog opportunity. `recommendation_id` is one row inside that opportunity. They are different IDs.

`latest_application_status` is the latest apply request DataDoe recorded. A new file does not delete that history. `latest_amazon_status` is the status Amazon returned later: `PUBLISHED`, `IN_PROGRESS`, `SUCCESS`, `FAILED`, or `REJECTED`. `latest_application_checked_at` is the time of that status read. A status read keeps the original submission time.

`first_published_at`, `data_source_updated_at`, and `metadata_updated_at` come from the opportunity freshness context when Amazon sends those times.

`ACCEPTED` means Amazon accepted the apply request. It does not mean the change is complete.

## Actions

Find, apply, and status use the same Action permissions, limits, and dry run as other Actions.

- `AMAZON_ADS_PARTNER_OPPORTUNITIES_FIND` reads one catalog page of metadata, not the recommendation rows
- `maxResults` is 1 to 100 and defaults to 10
- pass `nextToken` to read the next page
- a response limited to one seller omits partner-wide advertiser and row counts
- `AMAZON_ADS_PARTNER_RECOMMENDATIONS_APPLY` sends 1 to 100 recommendation IDs that share one opportunity, advertiser, entity, and marketplace
- dry run does not call Amazon
- HTTP 202 means Amazon accepted the request, and HTTP 422 can accept some IDs and reject others
- DataDoe keeps each apply outcome
- `AMAZON_ADS_PARTNER_RECOMMENDATION_STATUS_FIND` reads the status of 1 to 500 recommendation IDs and does not send another apply request
- check status before you retry an apply whose result you do not know

Advertiser and profile filters on find are alternatives. A row can match either filter. DataDoe still limits the call to the selected seller or vendor. An advertiser ID that is not in that connection is rejected and is not sent to Amazon.

Find one catalog page:

```json
{
    "type": "AMAZON_ADS_PARTNER_OPPORTUNITIES_FIND",
    "sellerOrVendorId": "SELLER_OR_VENDOR_ID",
    "dryRun": true,
    "details": {}
}
```

Apply recommendations that share one opportunity, advertiser, entity, and marketplace:

```json
{
    "type": "AMAZON_ADS_PARTNER_RECOMMENDATIONS_APPLY",
    "sellerOrVendorId": "SELLER_OR_VENDOR_ID",
    "dryRun": true,
    "details": {
        "partnerOpportunityId": "PARTNER_OPPORTUNITY_ID",
        "advertiserType": "SELLER",
        "encryptedAdvertiserId": "ENCRYPTED_ADVERTISER_ID",
        "entityId": "ENTITY_ID",
        "marketplace": "US",
        "recommendationIds": ["RECOMMENDATION_ID"]
    }
}
```

Read status with the same details and type `AMAZON_ADS_PARTNER_RECOMMENDATION_STATUS_FIND`. Dry run checks the saved rows and does not call Amazon.

## When you see no rows

No rows can be a valid result. Amazon may have no file, or the file may list no recommendations for this advertiser. The table also stays empty until the ID is saved, the table is enabled, and the daily sync has run.

An empty file removes older rows for that opportunity and connection. Clearing the Partner Network account ID, revoking the Ads connection, or removing a connection from the shared account also removes that connection's rows.

If `can_apply` is false, the recommendation is expired, removed, or has no Partner Network apply endpoint. Apply rejects it. Status can still read a matching row.

If saving the ID fails with a permissions message, the Amazon login needs Partner Network access, or the Ads connection needs to be authorized again.

Campaign diagnostics in Amazon Marketing Stream are a different recommendation feed. A diagnostics recommendation ID is not a Partner Network opportunity ID.
