v2.0.0
OpenAPI 3.2.0

Keyword.com Google SERP Tracker API v2

Introduction

The Keyword.com API empowers developers to programmatically access and manage keyword ranking data, giving you the same core functionality available in the Keyword.com interface. Whether you’re building an SEO tool, a content marketing platform, or a performance dashboard, our API delivers the data and insights needed to grow search visibility and drive traffic.

This documentation covers everything you need to get started:

  • Authentication using secure headers

  • RESTful endpoints for managing projects and keywords

  • Practical examples of requests and responses

  • Tips for efficient, scalable integration

Getting Started

To use the API, you’ll need an API token. If you don’t have one yet, create an account on Keyword.com and retrieve your token under Settings > Account tab.

Once authenticated, you can:

  • Retrieve project and keyword ranking data

  • Add and delete keywords

  • Trigger on-demand keyword refreshes

  • Access custom shareable view links for reporting

  • And more...

With this API, you can integrate Keyword.com into your internal tools, automate SEO workflows, and scale your keyword tracking operations.

Authentication

The Keyword.com API uses token-based authentication via HTTP headers for secure access.

Required Header

Include the following header in all your API requests:

Authorization: Bearer [API_TOKEN]

Example:

curl --location 'https://app.keyword.com/api/v2/groups/Apple/keywords/272678916' \
--header 'Authorization: Bearer [API_TOKEN]'

API Token Types

There are two types of tokens:

  • Master API Token

    Grants full access to your account, including all projects and administrative actions (e.g., add/remove keywords, manage users).

  • Project Auth Token + ViewKey

    Provides access to a specific project. Useful when sharing data with third-party tools or restricting access.

Keep your API key and tokens secure, and do not share them with unauthorized users. Anyone with your token can read and modify your Keyword.com data.

Making API Requests

The Keyword.com API follows a RESTful design, using standard HTTP methods:

  • GET to retrieve data

  • POST to create resources

  • PATCH to update data

  • DELETE to remove resources

All responses are returned in JSON format for easy integration.

Base URL

All API requests should be made to:

https://app.keyword.com/api/v2

Rate Limits

API requests are rate-limited per token to protect service stability:

Endpoint group Limit
Keywords (list, get, create, delete) 60 requests/minute
Competitor history 30 requests/minute
All other endpoints 60 requests/minute
When you exceed a rate limit, the API returns HTTP 429 Too Many Requests. Use exponential backoff (e.g. retry after 1s, then 2s, then 4s) rather than retrying immediately.

Pagination

List endpoints return paginated results. Control pagination with query parameters:

Parameter Type Description
page integer Page number (default: 1)
per_page integer Results per page (default: 20, max varies by endpoint)

Paginated responses include metadata:

{
  "data": [...],
  "meta": {
    "pagination": {
      "total": 150,
      "count": 20,
      "per_page": 20,
      "current_page": 1,
      "total_pages": 8
    }
  },
  "links": {
    "self": "https://app.keyword.com/api/v2/...&page=1",
    "first": "https://app.keyword.com/api/v2/...&page=1",
    "next": "https://app.keyword.com/api/v2/...&page=2",
    "last": "https://app.keyword.com/api/v2/...&page=8"
  }
}

Error Handling

Error responses follow a consistent format with an errors array:

{
  "errors": [
    {
      "code": "401",
      "title": "Your request is unauthorized",
      "message": "Unauthenticated."
    }
  ]
}

HTTP Status Meaning
401 Invalid or missing API token
403 Insufficient permissions (e.g. view-only token)
404 Resource not found
422 Validation error — check the message field for details
429 Rate limit exceeded

Keyword Update Schedule

One of the core benefits of using Keyword.com is that you don’t need to manually run API requests to keep your keyword data fresh—we handle that for you.

When you add keywords to a project, they’re automatically queued for updates according to your plan. Our system continuously tracks and refreshes keyword rankings in the background, so you can focus on analysis and insights rather than data collection.

Automatic Update Frequency

Plan Type Update Frequency
Daily Every 24 hours
Weekly Every 7 days

Example: If you’re on a weekly plan and added keywords on a Wednesday, your keywords will automatically refresh every Wednesday between 00:00 and 12:00 UTC

On-demand refreshes are limited based on your plan and count separately from the automatic updates above.

This hybrid approach gives you both the convenience of automation and the control of real-time updates when you need them.

Server:https://app.keyword.com
Client Libraries

Projects

Create, retrieve, update, archive, and delete projects and groups. Projects are the top-level container for keywords. Groups are sub-projects within a project, identified by the [sub] naming convention (e.g. Disney[sub]Disney Classics).

List projects

This call will get you a summary of all your projects with their respective groups, tags and number of keywords. It will also provide you with the PROJECT AUTH KEY which is required to collect detailed project and keyword data.

Important Notes:

  1. The group name must follow the required naming convention and include [sub] when submitting the request.

  2. Ensure the parent project is created before adding groups to it.

Responses
  • 200
    Type: object

    Returns all projects and groups (subprojects) with their tags and keyword counts. Groups are identified by the [sub] naming convention in the id field (e.g. Disney[sub]Disney Classics).

    • data
      Type: array object[] ·
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/groups/active
curl https://app.keyword.com/api/v2/groups/active \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "type": "group",
      "id": "Disney",
      "attributes": {
        "project_id": 3057417,
        "auth": "YOUR_PROJECT_AUTH_KEY",
        "name": "Disney",
        "keywords_count": {
          "ACTIVE": 11
        },
        "tags_count": 2,
        "tags": [
          {
            "id": 27727,
            "project_id": 3057417,
            "name": "Disney",
            "created_at": "2021-09-30 05:11:38",
            "updated_at": "2021-09-30 05:11:38",
            "keywords_count": 6
          },
          {
            "id": 27728,
            "project_id": 3057417,
            "name": "Walt Disney",
            "created_at": "2021-09-30 05:12:02",
            "updated_at": "2021-09-30 05:12:02",
            "keywords_count": 4
          }
        ],
        "keywords_last_updated_at": "2023-04-14T07:17:52-04:00",
        "notes_count": 0,
        "updated_at": "2021-05-11T09:49:33-04:00",
        "password": null,
        "company_name": null,
        "company_desc": null,
        "company_link": null,
        "company_logo": null,
        "sov_view_key": false
      }
    },
    {
      "type": "group",
      "id": "Disney[sub]Disney Classics",
      "attributes": {
        "project_id": 3144454,
        "auth": "YOUR_PROJECT_AUTH_KEY",
        "name": "Disney[sub]Disney Classics",
        "keywords_count": {
          "ACTIVE": 4
        },
        "keywords_last_updated_at": "2023-04-14T06:18:57-04:00",
        "shortkey": "rDSNGGf",
        "notes_count": 0,
        "updated_at": "2021-08-19T09:21:37-04:00",
        "crawled_at": 1681467537,
        "password": null,
        "company_name": null,
        "company_desc": null,
        "company_link": null,
        "company_logo": null,
        "sov_view_key": false,
        "url": null
      }
    }
  ]
}

Create project

Use this endpoint to create a single project in your Keyword.com account

Body
required
application/json
  • data
    Type: object
    required
Responses
  • 201
    Type: object

    Create project

    • data
      Type: object ·
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for post/api/v2/groups
curl https://app.keyword.com/api/v2/groups \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "data": {
    "type": "group",
    "attributes": {
      "category": "Disney",
      "currency_code": "USD"
    }
  }
}'
{
  "data": {
    "type": "group",
    "id": "audi",
    "attributes": {
      "project_id": 3698242,
      "auth": "4857y4iurbfwekjfrbkebrq",
      "name": "audi",
      "keywords_count": [],
      "tags_count": 0,
      "tags": [],
      "keywords_last_updated_at": null,
      "shortkey": "RfVyHsg",
      "notes_count": 0,
      "updated_at": "2024-06-04T13:22:35+00:00",
      "crawled_at": null,
      "password": null,
      "company_name": null,
      "company_desc": null,
      "company_link": null,
      "company_logo": null,
      "sov_view_key": false,
      "url": null,
      "currency_code": "GBP",
      "project_overview_settings": {
        "project_metrics": {
          "visible": true,
          "order": 0
        },
        "keywords_in_top": {
          "visible": true,
          "order": 1
        },
        "sov": {
          "visible": true,
          "order": 2
        },
        "visibility": {
          "visible": true,
          "order": 3
        },
        "estimated_traffic": {
          "visible": true,
          "order": 4
        },
        "top_pages": {
          "visible": true,
          "order": 5
        },
        "organic_traffic_acquisition": {
          "visible": true,
          "order": 6
        },
        "serp_feature_performance": {
          "visible": true,
          "order": 7
        },
        "keywords_by_intent": {
          "visible": true,
          "order": 8
        },
        "average_rank": {
          "visible": true,
          "order": 9
        }
      }
    }
  }
}

Get project

This call is used to retrieve a single project’s summary of groups, tags and number of keywords. It will also provide you with the PROJECT AUTH KEY which is required to collect detailed project and keyword data.

Important Notes:

  1. The group name must follow the required naming convention and include [sub] when submitting the request.

  2. Ensure the parent project is created before adding groups to it.

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Responses
  • 200
    Type: object

    Retrieve details for a single project or group (subproject). To fetch a group, use the full name including [sub] (e.g. Disney[sub]Disney Classics).

    • data
      Type: object ·
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/groups/{project_name}
curl https://app.keyword.com/api/v2/groups/Disney \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "type": "group",
    "id": "Disney",
    "attributes": {
      "project_id": 3057417,
      "auth": "YOUR_PROJECT_AUTH_KEY",
      "name": "Disney",
      "keywords_count": {
        "ACTIVE": 11
      },
      "tags_count": 2,
      "tags": [
        {
          "id": 27727,
          "project_id": 3057417,
          "name": "Disney",
          "created_at": "2021-09-30 05:11:38",
          "updated_at": "2021-09-30 05:11:38",
          "keywords_count": 6
        },
        {
          "id": 26502,
          "project_id": 3057417,
          "name": "Donald Duck",
          "created_at": "2021-08-27 05:34:55",
          "updated_at": "2021-08-27 05:34:55",
          "keywords_count": 5
        }
      ],
      "keywords_last_updated_at": "2023-04-15T06:13:22-04:00",
      "notes_count": 0,
      "updated_at": "2021-05-11T09:49:33-04:00",
      "password": null,
      "company_name": null,
      "company_desc": null,
      "company_link": null,
      "company_logo": null,
      "sov_view_key": false
    }
  }
}

Delete project

This call will delete a single project or group.

Important Notes:

  1. The group name must follow the required naming convention and include [sub] when submitting the request.

  2. Ensure the parent project is created before adding groups to it.

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Responses
  • 200
    Type: object

    Permanently delete a project or group (subproject). This cannot be undone — all keywords and historical data will be lost. To delete a group, use the full name including [sub].

    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for delete/api/v2/groups/{project_name}
curl https://app.keyword.com/api/v2/groups/Disney \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "meta": {
    "title": "Group has been deleted",
    "code": "1002",
    "extra_data": []
  }
}

Archive project

Sets the project status to “Archived.” The project will remain in the “Archived” state until it is either restored or permanently deleted.

Important Notes:

  1. The group name must follow the required naming convention and include [sub] when submitting the request.

  2. Ensure the parent project is created before adding groups to it.

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Body
required
application/json
  • data
    Type: object
    required
Responses
  • 200
    Type: object

    Project or group has been archived successfully

    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for put/api/v2/groups/{project_name}
curl https://app.keyword.com/api/v2/groups/Disney \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "data": {
    "type": "group",
    "attributes": {
      "status": 2
    }
  }
}'
{
  "meta": {
    "title": "Group has been archived",
    "code": "1003"
  }
}

Restore project

This endpoint allows users to restore archived projects or groups. Once restored, the associated keywords will automatically update during the next scheduled automatic cycle. If an immediate update is needed, users can trigger an on-demand request for the restored project.

Important Notes:

  • The group name must follow the required naming convention and include [sub] when submitting the request.
  • Ensure the parent project is created before adding groups to it.
Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Responses
  • 200
    Type: object

    Project or group has been restored successfully

    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/groups/{project_name}/undo/archive
curl https://app.keyword.com/api/v2/groups/Disney/undo/archive \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "meta": {
    "title": "Group has been restored",
    "code": "1004"
  }
}

Keywords

List keywords

Use this endpoint to fetch all keyword settings and ranking metrics for a specific group or project. This includes each keyword’s configuration, rank history, and associated metrics.

By default, the API returns 20 results per page. However, for best performance—especially when dealing with large datasets—we recommend setting the per_page parameter to 250 and paginating through results using the page parameter.

Example for a group or project with 500 keywords:

  • Request 1:

    https://app.keyword.com/api/v2/groups/[project_name]/keywords/?per_page=250&page=1

  • Request 2:

    https://app.keyword.com/api/v2/groups/[project_name]/keywords/?per_page=250&page=2

This method ensures faster responses and minimizes server load while retrieving bulk keyword data.

⚠️ Note: If per_page is not specified, the default is 20 results per page.

You can obtain each keyword_id after you’ve added a keyword to a group or project. This ID is used for other actions like updating or refreshing a specific keyword.

You can also collect the data for a single date by using the 'date' parameter.

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Query Parameters
  • per_page
    Type: integer

    Maximum number of results per page (default 20, recommended 250)

  • page
    Type: integer

    Page number for paginated results (default 1)

  • date
    Type: string Format: date

    Retrieve ranking data for a specific date (YYYY-MM-DD)

Responses
  • 200
    Type: object

    Retrieve all keywords and their data in project or group

    • data
      Type: array object[] ·
    • Type: object
    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/groups/{project_name}/keywords
curl https://app.keyword.com/api/v2/groups/Disney/keywords \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "type": "keyword",
      "id": "187181871",
      "attributes": {
        "project_id": 3057417,
        "category": "Disney",
        "url": "disney.com",
        "auth": "YOUR_PROJECT_AUTH_KEY",
        "kw": "disneyland",
        "source": 3,
        "start": 76,
        "notes": null,
        "tags_count": 0,
        "tags": [],
        "tag": null,
        "region": "google.com",
        "language": "en",
        "in_featured": false,
        "has_featured": false,
        "has_featured_url": "",
        "ignore_local": true,
        "ignore_featured": true,
        "type": "se",
        "gmb": null,
        "near": null,
        "isfav": true,
        "status": "ACTIVE",
        "clicks": 22,
        "impressions": -1,
        "ctr": 1.34,
        "ms": 1500000,
        "competition": 0.073667314,
        "cpc": 0.83,
        "gpage": 1,
        "serp_features": {},
        "grank": 10,
        "grank_int": 5,
        "best": 5,
        "seocomp": 193000000,
        "in_local_pack": false,
        "rankingurl": "https://www.disney.com/",
        "grankhistory": [
          10,
          14,
          13,
          14,
          10,
          10,
          12
        ],
        "trends": {
          "day": 4,
          "week": 2,
          "month": -2,
          "life": 66
        },
        "updated_at": "2021-05-11T09:49:48-04:00",
        "crawled_at": 1681575247
      }
    },
    {
      "type": "keyword",
      "id": "196465030",
      "attributes": {
        "project_id": 3057417,
        "category": "Disney",
        "url": "disney.com",
        "auth": "YOUR_PROJECT_AUTH_KEY",
        "kw": "donald duck",
        "source": 3,
        "start": 3,
        "notes": null,
        "tags_count": 0,
        "tags": [],
        "tag": null,
        "region": "google.com",
        "language": "en",
        "in_featured": false,
        "has_featured": false,
        "has_featured_url": "",
        "ignore_local": true,
        "ignore_featured": true,
        "type": "se",
        "gmb": null,
        "near": null,
        "isfav": false,
        "status": "ACTIVE",
        "clicks": -1,
        "impressions": -1,
        "ctr": -1,
        "ms": 246000,
        "competition": 0.876595551,
        "cpc": 0.19,
        "gpage": 1,
        "serp_features": {},
        "grank": 3,
        "grank_int": 5,
        "best": 2,
        "seocomp": 46400000,
        "in_local_pack": false,
        "rankingurl": "https://mickey.disney.com/donald",
        "grankhistory": [
          3,
          4,
          3,
          3,
          3,
          3,
          3
        ],
        "trends": {
          "day": 1,
          "week": 0,
          "month": 0,
          "life": 0
        },
        "updated_at": "2021-08-27T05:34:55-04:00",
        "crawled_at": 1681575230
      }
    }
  ],
  "meta": {
    "pagination": {
      "total": 15,
      "count": 15,
      "per_page": 20,
      "current_page": 1,
      "total_pages": 1
    }
  },
  "links": {
    "self": "https://app.keyword.com/api/v2/groups/Disney/keywords?api_token=YOUR_API_TOKEN&page=1",
    "first": "https://app.keyword.com/api/v2/groups/Disney/keywords?api_token=YOUR_API_TOKEN&page=1",
    "last": "https://app.keyword.com/api/v2/groups/Disney/keywords?api_token=YOUR_API_TOKEN&page=1"
  }
}

Add keywords

Add keywords to project or group. The response will include details of the keywords, but will not include tracking data and keyword metrics. Those are being updated in the background.

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Body
required
application/json
  • data
    Type: array object[]
    required
Responses
  • 201
    Type: object

    Add keywords to project or group

    • data
      Type: array object[] ·
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for post/api/v2/groups/{project_name}/keywords
curl https://app.keyword.com/api/v2/groups/Disney/keywords \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "data": [
    {
      "type": "keyword",
      "attributes": {
        "category": "Disney",
        "url": "disney.com",
        "region": "google.com",
        "language": "en",
        "kw": "Jungle Book",
        "type": "se",
        "ignore_local": true,
        "source": 1,
        "tags": [],
        "url_tracking_method": "broad"
      }
    }
  ]
}'
{
  "data": [
    {
      "type": "keyword",
      "id": "246481552",
      "attributes": {
        "project_id": 3141213,
        "category": "Intirol",
        "url": "disney.com",
        "auth": "YOUR_PROJECT_AUTH_KEY",
        "kw": "jungle book",
        "start": null,
        "notes": null,
        "tags_count": 0,
        "tags": [],
        "tag": null,
        "region": "google.com",
        "language": "en",
        "in_featured": false,
        "has_featured": false,
        "has_featured_url": null,
        "ignore_local": true,
        "ignore_featured": true,
        "url_tracking_method": "broad",
        "type": "se",
        "gmb": null,
        "near": null,
        "isfav": false,
        "status": "ACTIVE",
        "clicks": 14,
        "impressions": -1,
        "ctr": 0.53,
        "ms": 53422,
        "competition": "Low",
        "cpc": 4.21,
        "gpage": null,
        "serp_features": {},
        "grank": null,
        "grank_int": 5,
        "best": null,
        "seocomp": null,
        "in_local_pack": false,
        "rankingurl": "NOT FOUND",
        "grankhistory": null,
        "trends": {
          "day": 0,
          "week": 0,
          "month": 0,
          "life": 0
        },
        "updated_at": "2023-04-15T08:27:55-04:00",
        "crawled_at": null
      }
    }
  ],
  "meta": {
    "title": "1 keyword has been added",
    "counts": {
      "duplicates": 0,
      "added": 1
    }
  }
}

Get keyword

Use this call to retrieve all the keyword settings and ranking metrics for a single keyword. The keyword_id is the unique identifier of the keyword, which is obtained after you add the keyword.

You can add the 'date' parameter to retrieve the ranking data for a specific date.

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

  • keyword_id
    Type: string
    required
Query Parameters
  • date
    Type: string Format: date

    Retrieve ranking data for a specific date (YYYY-MM-DD)

Responses
  • 200
    Type: object

    Retrieve single keyword data

    • data
      Type: object ·
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/groups/{project_name}/keywords/{keyword_id}
curl https://app.keyword.com/api/v2/groups/Disney/keywords/272678916 \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "type": "keyword",
    "id": "187181871",
    "attributes": {
      "project_id": 3057417,
      "category": "Disney",
      "url": "disney.com",
      "auth": "YOUR_PROJECT_AUTH_KEY",
      "kw": "disneyland",
      "source": 3,
      "start": 76,
      "notes": null,
      "tags_count": 2,
      "tags": [
        {
          "id": 27727,
          "project_id": 3057417,
          "name": "Disney",
          "created_at": "2021-09-30 05:11:38",
          "updated_at": "2021-09-30 05:11:38",
          "pivot": {
            "keyword_id": 187181871,
            "tag_id": 27727
          }
        }
      ],
      "tag": null,
      "region": "google.com",
      "language": "en",
      "in_featured": false,
      "has_featured": false,
      "has_featured_url": "",
      "ignore_local": true,
      "included_in_sov": true,
      "ignore_featured": true,
      "type": "se",
      "gmb": null,
      "near": null,
      "isfav": true,
      "status": "ACTIVE",
      "clicks": -1,
      "impressions": -1,
      "ctr": -1,
      "ms": 1830000,
      "cpc": 0.44279999999999997,
      "competition": 0.34,
      "gpage": 1,
      "serp_features": {
        "knowledge_panel": false,
        "reviews": 1,
        "site_links": 0,
        "ppl_also_ask": 1,
        "top_stories": 0,
        "ads": 0
      },
      "grank": 10,
      "grank_int": 5,
      "best": 3,
      "seocomp": 270000000,
      "in_local_pack": false,
      "rankingurl": "https://www.disney.com/",
      "grankhistory": [
        10,
        9,
        10,
        10,
        6,
        8,
        11,
        12,
        6,
        8,
        9,
        7,
        10,
        6,
        10,
        8,
        9,
        8,
        17,
        13,
        23,
        18,
        14,
        18,
        6,
        8,
        7,
        11,
        10,
        8,
        10
      ],
      "trends": {
        "day": -1,
        "week": 2,
        "month": 0,
        "life": 66
      },
      "crawled_at": 1716770343,
      "updated_at": "2021-05-11T09:49:48+00:00",
      "is_paginated": 2,
      "currency_symbol": "€",
      "search_intents": {
        "commercial": 0.53532242,
        "informational": 0.847743,
        "navigational": null,
        "transactional": null
      }
    }
  }
}

Delete keyword

  • Use this call to delete keywords from a project or group. Note that this cannot be undone and when deleted you lose all historic ranking data.
Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

  • keyword_id
    Type: string
    required
Query Parameters
  • date
    Type: string Format: date

    Retrieve ranking data for a specific date (YYYY-MM-DD)

Responses
  • 200
    Type: object

    Delete single keyword

    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for delete/api/v2/groups/{project_name}/keywords/{keyword_id}
curl https://app.keyword.com/api/v2/groups/Disney/keywords/272678916 \
  --request DELETE \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "meta": {
    "title": "1 keyword has been deleted",
    "code": "1012",
    "extra_data": []
  }
}

Bulk delete keywords

Path Parameters
  • project_id
    Type: string
    required

    Numeric project identifier

Body
application/json
  • data
    Type: object
    required
Responses
  • 200
    Type: object

    Keywords have been deleted successfully

    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for delete/api/v2/projects/{project_id}/keywords
curl https://app.keyword.com/api/v2/projects/3057417/keywords \
  --request DELETE \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "data": {
    "type": "keyword",
    "ids": [
      "272678916",
      "272678917",
      "272678918"
    ]
  }
}'
{
  "meta": {
    "title": "Keywords have been deleted"
  }
}

Update keywords

Path Parameters
  • project_id
    Type: string
    required

    Numeric project identifier

Body
required
application/json
  • data
    Type: object
    required
Responses
  • 200
    Type: object

    Keywords updated successfully

    • data
      Type: object
    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for patch/api/v2/projects/{project_id}/keywords
curl https://app.keyword.com/api/v2/projects/3057417/keywords \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "data": {
    "ids": [
      "267540882"
    ],
    "type": "keyword",
    "attributes": {
      "url": "dell.com",
      "region": "google.ca",
      "language": "en-ca",
      "type": "se"
    }
  }
}'
{
  "data": {
    "existingKeywordsCount": [
      {
        "id": 3812345,
        "project_name": "Disney",
        "count": 1
      }
    ]
  },
  "meta": {
    "title": "1 keyword has been updated",
    "code": "1013",
    "extra_data": {
      "duplicates": 0,
      "affected": 1
    }
  }
}

Refresh keywords

Use this call to run an on demand update for all the keywords in a project or group.

Important Notes:

  1. The group name must follow the required naming convention and include [sub] when submitting the request.

  2. Ensure the parent project is created before adding groups to it.

Body
required
application/json
  • data
    Type: object
    required
Responses
  • 200
    Type: object

    On demand refresh of keywords in a single project

    • message
      Type: string
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for post/api/v2/keywords/refresh
curl https://app.keyword.com/api/v2/keywords/refresh \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "data": {
    "include_sub_groups": true,
    "project_ids": [
      "3057417"
    ]
  }
}'
{
  "message": "You have 3934 keyword refreshes left."
}

Ranking Data

Get keyword metrics

GET /api/v2/groups/Disney/metrics

This endpoint retrieves metrics for a specific group within a project.

Request

  • Path Parameters
    • project_name (string, required): The name of the project.
  • Query Parameters
    • tagId (string, required): The ID of the tag.
    • timeframe (string, required): The time frame for the metrics.

Response

The response for this request follows the JSON schema below:

{
  "data": {
    "type": "",
    "id": "",
    "attributes": {
      "ranges": [
        {
          "daily": {
            "count": 0,
            "change": 0,
            "status": ""
          },
          "weekly": {
            "count": 0,
            "change": 0,
            "status": ""
          },
          "monthly": {
            "count": 0,
            "change": 0,
            "status": ""
          },
          "semester": {
            "count": 0,
            "change": 0,
            "status": ""
          },
          "yearly": {
            "count": 0,
            "change": 0,
            "status": ""
          },
          "life": {
            "count": 0,
            "change": 0,
            "status": ""
          },
          "count": 0,
          "title": ""
        }
      ],
      "movements": {
        "daily": {
          "up": 0,
          "down": 0,
          "tie": 0
        },
        "weekly": {
          "up": 0,
          "down": 0,
          "tie": 0
        },
        "monthly": {
          "up": 0,
          "down": 0,
          "tie": 0
        },
        "semester": {
          "up": 0,
          "down": 0,
          "tie": 0
        },
        "yearly": {
          "up": 0,
          "down": 0,
          "tie": 0
        },
        "life": {
          "up": 0,
          "down": 0,
          "tie": 0
        }
      },
      "chart": null,
      "total": 0
    }
  }
}
Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Query Parameters
  • tagId
    Type: string
  • timeframe
    Type: string

    Returns keyword movement metrics (improved, declined, no change) for a project, group (subproject), or tag. Use query parameters to filter by tag and time frame.

Responses
  • 200
    Type: object

    Get keyword movement metrics for project, group or tag

    • data
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/groups/{project_name}/metrics
curl https://app.keyword.com/api/v2/groups/Disney/metrics \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "type": "metrics",
    "id": "00-Keyword.com",
    "attributes": {
      "ranges": [
        {
          "daily": {
            "count": 5,
            "change": 0,
            "status": "tie"
          },
          "weekly": {
            "count": 5,
            "change": 0,
            "status": "tie"
          },
          "monthly": {
            "count": 5,
            "change": 0,
            "status": "tie"
          },
          "semester": {
            "count": 5,
            "change": 0,
            "status": "tie"
          },
          "yearly": {
            "count": 5,
            "change": 0,
            "status": "tie"
          },
          "life": {
            "count": 7,
            "change": -2,
            "status": "down"
          },
          "count": 5,
          "title": "Top 3"
        },
        {
          "daily": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "weekly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "monthly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "semester": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "yearly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "life": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "count": 7,
          "title": "Top 5"
        },
        {
          "daily": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "weekly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "monthly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "semester": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "yearly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "life": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "count": 7,
          "title": "Top 10"
        },
        {
          "daily": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "weekly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "monthly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "semester": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "yearly": {
            "count": 7,
            "change": 0,
            "status": "tie"
          },
          "life": {
            "count": 8,
            "change": -1,
            "status": "down"
          },
          "count": 7,
          "title": "Top 20"
        },
        {
          "daily": {
            "count": 9,
            "change": 1,
            "status": "up"
          },
          "weekly": {
            "count": 10,
            "change": 0,
            "status": "tie"
          },
          "monthly": {
            "count": 10,
            "change": 0,
            "status": "tie"
          },
          "semester": {
            "count": 10,
            "change": 0,
            "status": "tie"
          },
          "yearly": {
            "count": 10,
            "change": 0,
            "status": "tie"
          },
          "life": {
            "count": 9,
            "change": 1,
            "status": "up"
          },
          "count": 10,
          "title": "Top 100"
        }
      ],
      "movements": {
        "daily": {
          "up": 2,
          "down": 0,
          "tie": 9
        },
        "weekly": {
          "up": 0,
          "down": 0,
          "tie": 11
        },
        "monthly": {
          "up": 0,
          "down": 0,
          "tie": 11
        },
        "semester": {
          "up": 0,
          "down": 0,
          "tie": 11
        },
        "yearly": {
          "up": 0,
          "down": 0,
          "tie": 11
        },
        "life": {
          "up": 3,
          "down": 7,
          "tie": 1
        }
      },
      "chart": null,
      "total": 11
    }
  }
}

Get rank history

Returns the daily ranking position for each specified keyword for the number of days prior to today.

You can specify up to 180 days of history using the limit query parameter. Rankings are grouped by keyword ID and domain and include both chart-compatible date formats (Date.UTC) and raw rank history with URLs.

Query Parameters
  • action
    enum
    const:  
    bulkChart

    Chart type (bulkChart for multiple keywords)

    values
    • bulkChart
  • limit
    Type: integer
    max:  
    180

    Number of days of rank history to retrieve (max 180)

Body
application/json
  • kwid
    Type: array string[]
Responses
  • 200
    Type: object

    Retrieve Ranking history for set number of days

    • data
      Type: array object[]
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for post/api/v2/keywords/chart
curl https://app.keyword.com/api/v2/keywords/chart \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "kwid": [
    "272678916"
  ]
}'
{
  "data": [
    {
      "kwid": 196465030,
      "data": [
        [
          {
            "name": "disney.com",
            "data": [
              [
                "Date.UTC(2023,3,10)",
                5
              ],
              [
                "Date.UTC(2023,3,11)",
                7
              ],
              [
                "Date.UTC(2023,3,12)",
                6
              ]
            ]
          }
        ]
      ],
      "domains": [
        "disney.com"
      ]
    }
  ]
}

Get competitors

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

  • keyword_id
    Type: string
    required

    Unique keyword identifier

Query Parameters
  • dateRange
    Type: string

    Comma-separated start and end dates (YYYY-MM-DD,YYYY-MM-DD)

Responses
  • 200
    Type: object

    Returns the top 100 competing URLs for a single keyword, including their rank position and result type (organic, featured snippet, etc.).

    • data
      Type: array object[]
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/metrics/{project_name}/competitors/{keyword_id}/history
curl https://app.keyword.com/api/v2/metrics/Disney/competitors/272678916/history \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "rank": 7,
      "results": [
        {
          "resultType": "organic",
          "url": "https://disneyland.disney.go.com/",
          "title": "Disneyland Official Site"
        },
        {
          "resultType": "organic",
          "url": "https://en.wikipedia.org/wiki/Disneyland",
          "title": "Disneyland - Wikipedia"
        },
        {
          "resultType": "organic",
          "url": "https://www.undercovertourist.com/",
          "title": "Discount Theme Park Tickets"
        }
      ],
      "date": "Apr 15, 2023"
    }
  ]
}

List regions

Use this call to get a list of all the regions your are tracking in this project with the count of number of keywords per region.

Important Notes:

  1. The group name must follow the required naming convention and include [sub] when submitting the request.

  2. Ensure the parent project is created before adding groups to it.

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Responses
  • 200
    Type: object

    Returns all Google regions being tracked in a project or group (subproject).

    • data
      Type: array object[]
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/groups/{project_name}/regions
curl https://app.keyword.com/api/v2/groups/Disney/regions \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "region": "google.com",
      "lang": "en",
      "type": "se",
      "total": 6
    },
    {
      "region": "google.com.au",
      "lang": "en-au",
      "type": "se",
      "total": 1
    },
    {
      "region": "google.es",
      "lang": "es",
      "type": "se",
      "total": 1
    }
  ]
}

Get top pages

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Responses
  • 200
    Type: object

    Returns the top-performing pages for a project or group (subproject) based on keyword rankings.

    • data
      Type: array object[]
    • Type: object
    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/groups/{project_name}/keywords/ranking-urls
curl https://app.keyword.com/api/v2/groups/Disney/keywords/ranking-urls \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "current_ranking_url": "https://movies.disney.com/a-z",
      "total_keyword_count": 1,
      "average_current_rank": 81,
      "average_previous_rank": 43,
      "total_search_volume": 140,
      "average_cost_per_click": 0
    },
    {
      "current_ranking_url": "https://mickey.disney.com/pluto",
      "total_keyword_count": 3,
      "average_current_rank": 67,
      "average_previous_rank": 28.3333,
      "total_search_volume": 2000000,
      "average_cost_per_click": 0.175275
    },
    {
      "current_ranking_url": "https://frozen.disney.com/",
      "total_keyword_count": 1,
      "average_current_rank": 41,
      "average_previous_rank": 41,
      "total_search_volume": 320,
      "average_cost_per_click": 0
    },
    {
      "current_ranking_url": "https://news.disney.com/20-beautiful-love-quotes-from-disney-movies",
      "total_keyword_count": 1,
      "average_current_rank": 32,
      "average_previous_rank": 0,
      "total_search_volume": 390,
      "average_cost_per_click": 0.20295
    },
    {
      "current_ranking_url": "https://origin.prod.mdxpepui.mdx.las1.wdpro.disney.com/entertainment/magic-kingdom/character-meet-ariel-grotto-fantasyland/",
      "total_keyword_count": 1,
      "average_current_rank": 22,
      "average_previous_rank": 21,
      "total_search_volume": 0,
      "average_cost_per_click": 0
    },
    {
      "current_ranking_url": "https://news.disney.com/at-home-with-olaf-disney-magic-moments",
      "total_keyword_count": 1,
      "average_current_rank": 18,
      "average_previous_rank": 0,
      "total_search_volume": 368000,
      "average_cost_per_click": 0.1476
    },
    {
      "current_ranking_url": "https://princess.disney.com/pocahontas",
      "total_keyword_count": 2,
      "average_current_rank": 8.5,
      "average_previous_rank": 34.5,
      "total_search_volume": 2440000,
      "average_cost_per_click": 0.101475
    },
    {
      "current_ranking_url": "https://movies.disney.com/the-aristocats",
      "total_keyword_count": 1,
      "average_current_rank": 8,
      "average_previous_rank": 7,
      "total_search_volume": 201000,
      "average_cost_per_click": 0.1845
    },
    {
      "current_ranking_url": "https://www.disney.com/",
      "total_keyword_count": 2,
      "average_current_rank": 8,
      "average_previous_rank": 6.5,
      "total_search_volume": 1940000,
      "average_cost_per_click": 0.9225
    },
    {
      "current_ranking_url": "https://movies.disney.com/sleeping-beauty",
      "total_keyword_count": 1,
      "average_current_rank": 5,
      "average_previous_rank": 4,
      "total_search_volume": 450000,
      "average_cost_per_click": 0.20295
    }
  ],
  "links": {
    "first": "http://app.keyword.com/api/v2/groups/Disney/keywords/ranking-urls?page=1",
    "last": "http://app.keyword.com/api/v2/groups/Disney/keywords/ranking-urls?page=2",
    "prev": null,
    "next": "http://app.keyword.com/api/v2/groups/Disney/keywords/ranking-urls?page=2"
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 2,
    "path": "http://app.keyword.com/api/v2/groups/Disney/keywords/ranking-urls",
    "per_page": 10,
    "to": 10,
    "total": 18
  }
}

Share of Voice

Retrieve Share of Voice (SoV) data showing how your domain compares against competitors for tracked keywords. Includes latest snapshots and historical trend data.

Get latest

Get the top 10 domains for Share of Voice.

Path Parameters
  • project_name
    Type: string
    required

    Project name, or group name using [sub] convention (e.g. Disney[sub]Disney Classics)

Responses
  • 200
    Type: object

    Retrieve latest Top 10 results for Share of Voice

    • data
      Type: array object[]
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/metrics/{project_name}/mindshare/latest
curl https://app.keyword.com/api/v2/metrics/Disney/mindshare/latest \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "title": "Tinker Bell",
      "url": "en.wikipedia.org",
      "clicks": 2750049.638000001,
      "percentage": 28.85809668022449,
      "changes": {
        "month": 4.182040388013718
      }
    },
    {
      "title": "Tinker Bell | Pixie Hollow | Disney Junior UK - YouTube",
      "url": "www.youtube.com",
      "clicks": 1730314.7160000002,
      "percentage": 18.1573411154345,
      "changes": {
        "month": 0.9847651518013425
      }
    },
    {
      "title": "What To Know Before You Go | Disneyland Resort",
      "url": "disneyland.disney.go.com",
      "clicks": 1145100,
      "percentage": 12.01629456134386,
      "changes": {
        "month": 6.058516867515394
      }
    },
    {
      "title": "Tinker Bell (Video 2008)",
      "url": "www.imdb.com",
      "clicks": 461440.10000000003,
      "percentage": 4.842197331251391,
      "changes": {
        "month": 0
      }
    },
    {
      "title": "Disney Princess | Official Site",
      "url": "princess.disney.com",
      "clicks": 259037.7,
      "percentage": 2.718254567891907,
      "changes": {
        "month": 2.718254567891907
      }
    },
    {
      "title": "Tinker Bell | Disney Wiki | Fandom",
      "url": "disney.fandom.com",
      "clicks": 136242.528,
      "percentage": 1.4296833012227217,
      "changes": {
        "month": 0.4283974915945753
      }
    },
    {
      "title": "Moana - Home",
      "url": "www.facebook.com",
      "clicks": 119479.692,
      "percentage": 1.2537797337967334,
      "changes": {
        "month": 0.8569742149690017
      }
    },
    {
      "title": "Tinker Bell",
      "url": "fairies.disney.com",
      "clicks": 115854.90000000001,
      "percentage": 1.215742384748089,
      "changes": {
        "month": 0
      }
    },
    {
      "title": "Pluto TV - Drop in. Watch Free.",
      "url": "pluto.tv",
      "clicks": 94685.40000000001,
      "percentage": 0.9935967662725247,
      "changes": {
        "month": 0.9935967662725247
      }
    },
    {
      "title": "List of Disney Princesses - Disney Princess Wiki - Fandom",
      "url": "disneyprincess.fandom.com",
      "clicks": 86951.6,
      "percentage": 0.9124408682037786,
      "changes": {
        "month": 0.9124408682037786
      }
    }
  ]
}

Get history

Get share of Voice data for a range of time. The options you can use are 7 days, 30 days, 90 days, 180 days and 365 days. Depending on what day range you select, you will be presented with data like this:

7 days = Data points every 1 day for last 7 days;
30 days = Data point every 7 days for last 30 days;
90 days = Data point every 14 days for last 90 days;
180 days = Data point every 30 days for last 180 days;
365 days = Data point every 60 days for last 365 days;

Path Parameters
  • project_id
    Type: string
    required

    Numeric project identifier

Query Parameters
  • start_date
    Type: string Format: date

    Start date for SoV data range (YYYY-MM-DD). Defaults to 30 days ago.

  • end_date
    Type: string Format: date

    End date for SoV data range (YYYY-MM-DD). Defaults to today.

  • tagId
    Type: integer

    Filter SoV data by tag ID (0 or omit for all keywords)

  • daysrange
    Type: integer enum

    Backward-compatible shorthand: number of days from today. Ignored if start_date/end_date are provided.

    values
    • 7
    • 30
    • 90
    • 180
    • 365
Responses
  • 200
    Type: object

    Returns Share of Voice data over the requested time range

    • data
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/projects/{project_id}/mindshare/from-cache
curl https://app.keyword.com/api/v2/projects/3057417/mindshare/from-cache \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "latest": [
      {
        "url": "en.wikipedia.org",
        "clicks": 1072333.488,
        "percentage": 19.93,
        "domain_exist_in_project": false
      },
      {
        "url": "disneyland.disney.go.com",
        "clicks": 579457,
        "percentage": 10.77,
        "domain_exist_in_project": false
      },
      {
        "url": "princess.disney.com",
        "clicks": 215669.4,
        "percentage": 4.01,
        "domain_exist_in_project": false
      }
    ],
    "2023-08-02": [
      {
        "url": "en.wikipedia.org",
        "clicks": 1321317.479,
        "percentage": 24.55
      },
      {
        "url": "disneyland.disney.go.com",
        "clicks": 577350,
        "percentage": 10.73
      },
      {
        "url": "princess.disney.com",
        "clicks": 215816.6,
        "percentage": 4.01
      }
    ],
    "2023-07-26": [
      {
        "url": "en.wikipedia.org",
        "clicks": 1248335.619,
        "percentage": 23.2
      },
      {
        "url": "disneyland.disney.go.com",
        "clicks": 577350,
        "percentage": 10.73
      },
      {
        "url": "princess.disney.com",
        "clicks": 214970.2,
        "percentage": 3.99
      }
    ]
  }
}

Alerts

Manage keyword ranking alerts. Get notified when keywords move above or below specified thresholds.

Alerts Operations

List alerts

Retrieves all the alerts present for your Keyword.com account

Query Parameters
  • last
    Type: boolean

    When true, return only the most recent alert per keyword

  • page
    Type: integer

    Page number for paginated results (default 1)

  • per_page
    Type: integer

    Maximum number of results per page (default 100)

  • sort_direction
    Type: string enum

    Sort order (asc or desc)

    values
    • asc
    • desc
  • sort_field
    Type: string

    Field to sort results by

  • view_type
    Type: string

    Filter alerts by type

Responses
  • 200
    Type: object

    Get all alerts for account

    • data
      Type: array object[]
    • Type: object
    • meta
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/alerts
curl https://app.keyword.com/api/v2/alerts \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "type": "alert",
      "id": "552700104",
      "attributes": {
        "category": "Disney",
        "keyword_id": 187765907,
        "url": "disney.com/",
        "kw": "Donald Duck",
        "ms": 30,
        "region": "google.com",
        "language": "en",
        "prevrank": 5,
        "result": 1,
        "time": "2023-04-15T09:20:55-04:00",
        "created_at": 1681564855,
        "read": true
      }
    }
  ],
  "meta": {
    "pagination": {
      "total": 204,
      "count": 100,
      "per_page": 100,
      "current_page": 1,
      "total_pages": 3
    }
  },
  "links": {
    "self": "http://app.keyword.com/api/v2/alerts?q=%2Fapi%2Fv2%2Falerts&last=false&per_page=100&sort_direction=desc&sort_field=created_at&view_type=All%20alerts&api_token=YOUR_API_TOKEN&page=1",
    "first": "http://app.keyword.com/api/v2/alerts?q=%2Fapi%2Fv2%2Falerts&last=false&per_page=100&sort_direction=desc&sort_field=created_at&view_type=All%20alerts&api_token=YOUR_API_TOKEN&page=1",
    "next": "http://app.keyword.com/api/v2/alerts?q=%2Fapi%2Fv2%2Falerts&last=false&per_page=100&sort_direction=desc&sort_field=created_at&view_type=All%20alerts&api_token=YOUR_API_TOKEN&page=2",
    "last": "http://app.keyword.com/api/v2/alerts?q=%2Fapi%2Fv2%2Falerts&last=false&per_page=100&sort_direction=desc&sort_field=created_at&view_type=All%20alerts&api_token=YOUR_API_TOKEN&page=3"
  }
}

Account

Retrieve account profile and subscription information for the authenticated user.

Account Operations

Get current user

Query Parameters
  • include
    Type: string

    Comma-separated list of related resources to include (e.g. subscriptions)

Responses
  • 200
    Type: object

    Returns user profile information including subscription details

    • data
      Type: object
    application/json
  • 401
    Type: object ·

    Authentication failed — invalid or missing API token

    • errors
      Type: array object[]
    application/json
  • 404
    Type: object ·

    The requested resource was not found

    • errors
      Type: array object[]
    application/json
Request Example for get/api/v2/users/self
curl https://app.keyword.com/api/v2/users/self \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": {
    "type": "user",
    "id": "email@user.com",
    "attributes": {
      "user_is_restricted": false,
      "onboarding": true,
      "verified": 1,
      "user_id": 252725,
      "intercom_hash": "xxxxx",
      "intercom_user_id": "xxxxx",
      "name": "George",
      "addon_master_email": "",
      "addon_master_disabled": false,
      "addon_restricted": false,
      "api_token": "xxxxx",
      "showall": "xxxx",
      "sharedcountapi": "",
      "access_level": "master",
      "gsc_connected": true,
      "used": 6915,
      "package": 10000,
      "refreshes": {
        "used": 0,
        "remaining": 10000,
        "limit": 10000
      },
      "daily_added": {
        "used": 0,
        "remaining": 10000,
        "limit": 10000
      },
      "contactnum": "155526222",
      "contactnum_code": "US",
      "country": "US",
      "countrystate": "Alabama",
      "last_login_at": "2024-10-23T08:28:17+00:00",
      "created_at": "2021-04-12T11:48:53+00:00",
      "created_at_ts": 1618228133,
      "disabled": false,
      "is_not_stripe_user": false,
      "is_free_plan": false,
      "currency_code": "USD",
      "serp_and_ranking_history_limit_date": "1924-10-23",
      "trial_is_used": true,
      "package_info": {
        "title": "Enterprise Daily"
      }
    }
  }
}

Models