Skip to main content
Keywords belong to a project and identify a search phrase, market, device, and target URL. A market is a location and language pair.

Keyword resource

device is desktop or mobile. frequency is paused, manual, daily, weekly, monthly, or custom_cron. location_key accepts an optional @language qualifier such as ES/Andalusia/Malaga@en. An unqualified key uses the country’s default language. Supplying the default explicitly is an alias of the unqualified key, so ES and ES@es resolve to the same canonical market. Use the codes listed under Markets and languages. Every keyword resource reports language_code and language_label alongside the canonical location_key.

List project keywords

Query parameters: Response:

Match project keyword texts

Use this read-shaped POST to look up up to 50 exact tracked texts across their markets. Each request text is trimmed and lowercased before matching. matched_text contains that normalized value, so use it to join each response row to the normalized request. text remains the stored keyword text and can differ in case and whitespace. At most 100 market rows are returned for each matched_text. The response always includes meta.truncated_texts; a normalized text listed there has more matching markets and its returned rows are partial.

Add keywords

The request body may be one keyword object, an array of keyword objects, or an object with a keywords array. String entries in keywords are converted to { "keyword": "..." }.
Request fields: Within schedule, jitter_minutes must be a whole number from 0 to 120. Omitting it uses 60; 0 disables jitter. Use cron_expression with frequency: "custom_cron". Daily and weekly schedules use a stable, keyword-specific interval phase, so timezone does not move their phase. timezone anchors monthly and custom cron schedules to wall-clock time. Response status is 201 when at least one keyword is created. Duplicate keyword, location, and device combinations are skipped. If location resolution degrades, the response includes per-result warning values and a top-level warnings array with unique warning messages.

Get keyword

Returns one keyword resource or 404.

Update keyword

Request body:
Patch fields are optional: Within schedule, jitter_minutes accepts the inclusive range 0 to 120. Custom schedules use cron_expression. Daily and weekly schedules use a stable, keyword-specific interval phase independent of timezone; monthly and custom cron schedules use timezone as their wall-clock anchor. Identity fields are accepted when they match the stored term, market, and device. A differing identity value returns 409. To track a different term, market, or device, add it as its own keyword and archive the old keyword. Returns the updated keyword resource.

Delete keyword

Deletes the keyword and returns the deleted keyword resource.

Bulk mutate keywords

Supported operations: Example:
Response: