# ads_search_optimization_rules (https://sellersheetai.com/docs/mcp-api/tools/ads_search_optimization_rules)

> 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, …).

Access: **READ** · toolset amazon_ads · family ads.sp

Rules only ever INCREMENT by a PERCENT; to "lower" bids at night, set a lower base bid and add a rule that raises it during the hours you want. Amazon Ads API · SearchOptimizationRules · POST /sp/rules/optimization/search Docs: https://advertising.amazon.com/API/docs/en-us/sponsored-products/3-0/openapi/prod#tag/Optimization-Rules/operation/SearchOptimizationRules

## Call it

MCP tool call:

```json
{
  "name": "ads_search_optimization_rules",
  "arguments": {
    "store": "myStore-US",
    "countryCode": "<countryCode>",
    "body": {}
  }
}
```

Tool API (early access — contact us):

```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/ads_search_optimization_rules \
  -H "Authorization: Bearer $SELLERSHEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"store":"myStore-US","countryCode":"<countryCode>","body":{}}'
```

## Arguments

| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `<store>-<CC>` (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 | REQUIRED — Amazon 400s on an empty body. Exactly one of: a rule id filter ALONE (optimizationRuleFilter. optimizationRuleId), or campaignId + ruleCategory + ruleSubCategory together (campaignId lives in its OWN top-level campaignFilter object). |
| `apiVersion` | string |  | v1 (default — BID+SCHEDULE only) \| v2 (adds PERFORMANCE rules, the condition metrics, targeting[], and the ruleName/ruleStatus search filters). |

## Result

- Amazon's payload in data.result.
- `data.result.optimizationRules[]` — each with optimizationRuleId, status, ruleCategory, ruleSubCategory.
- `data.nextToken` — pass back as body.nextToken with the SAME filters; the page size is pageSize on v1 (≤ 100 rules) or maxResults on v2 (1–300).

## Gotchas

- v2's ruleName filter is unreliable — a name-filtered query can return 0 rows against many a name-less query returns. Filter by id or by campaign+category+subcategory and match names client-side.