[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Google Discover API and MCP server

> Google Discover has no API for the feed itself (checked 20 Oct 2026). The only official data is the Search Console Search Analytics API with type=discover, which returns clicks, impressions and CTR for your own properties. It does not return the cards a person sees, story clusters, or the follow, hide and Not interested controls.

Feed of recommended stories in the Google app and on google.com, based on what a signed-in person searches and reads, with controls to follow publishers and topics or hide them.

## What is the Google Discover API?

Cotlet's Google Discover API exposes 13 endpoints for your own Google Discover account: read the Discover feed, get the full coverage cluster of a card, check if a domain is in the feed, list followed publishers, list followed topics, list hidden publishers and topics, get Discover performance, list top Discover pages, follow a publisher, unfollow a publisher, hide a publisher, mark a card Not interested and unhide a publisher or topic. The get_discover_feed endpoint returns the current cards of the feed the signed-in account sees. Each endpoint takes simple JSON inputs like limit, publisher or url and works both as an operation of the google_discover_read or google_discover_write MCP tool for agents and as a REST call for scripts.

- **Category:** [Marketing & SEO](https://cotlet.dev/integrations/category/marketing-seo.md)
- **Endpoints:** 13 (8 read, 5 write)
- **Updated:** 2026-10-18

Google Discover has no API for the feed itself (checked 20 Oct 2026). Cotlet is a hosted MCP server and REST API for Google Discover with 13 endpoints (8 read, 5 write): you sign in once in your own cloud browser, your AI agent does the work.

## Does Google Discover have an official API?

Google Discover has no API for the feed itself (checked 20 Oct 2026). The only official data is the Search Console Search Analytics API with type=discover, which returns clicks, impressions and CTR for your own properties. It does not return the cards a person sees, story clusters, or the follow, hide and Not interested controls.

| Task | Google Discover official | Cotlet |
|---|---|---|
| Discover clicks, impressions and CTR by date, page, country and device | Yes: Search Analytics API with type=discover; our value is one key and one MCP server for everything | Yes |
| Top Discover pages of your property | Yes: Same API, grouped by page | Yes |
| Read the cards in the feed one account sees now | No | Yes |
| See the full coverage cluster of a card | No | Yes |
| Check whether a domain appears in the feed now | No | Yes |
| List followed publishers and topics | No | Yes |
| Follow or unfollow a publisher | No | Yes |
| Hide a publisher or mark a card Not interested | No | Yes |

Sources: [Search Console API: searchanalytics.query (type=discover)](https://developers.google.com/webmaster-tools/v1/searchanalytics/query), [Search Central blog: Search Analytics API now supports Discover, Google News and Regex](https://developers.google.com/search/blog/2021/10/search-analytics-discover-gnews), [Search Central: Google Discover](https://developers.google.com/search/docs/appearance/google-discover), [Google Search Help: Customize what you find in Discover](https://support.google.com/websearch/answer/2819496)

## For AI agents

```text
Google Discover has no API for the feed itself (checked 20 Oct 2026). The only official data is the Search Console Search Analytics API with type=discover, which returns clicks, impressions and CTR for your own properties. It does not return the cards a person sees, story clusters, or the follow, hide and Not interested controls.
Cotlet provides a hosted MCP server and REST API for Google Discover: 13 tools (8 read, 5 write).
Access       Sign up at https://cotlet.dev/app/signup?app=google-discover, then request the app and create API keys in the Cotlet console.

MCP server   https://cotlet.dev/mcp/v1
MCP tools    google_discover_read, google_discover_write, reads and writes apart; call one with {"operation": "<operation>", "arguments": {...}}
REST base    https://cotlet.dev/api/v1/google-discover, each operation at its own route, e.g. POST /api/v1/google-discover/publisher/follow
Auth         Authorization: Bearer <COTLET_API_KEY>. Listing endpoints and schemas needs no key; calling an endpoint needs one. Over MCP the input schemas come with sign-in.
Operations   get_discover_feed, get_story_cluster, check_domain_in_feed, list_followed_publishers, list_followed_topics, list_hidden_items, get_discover_performance, list_top_discover_pages, follow_publisher, unfollow_publisher, hide_publisher, mark_not_interested, unhide_item
Markdown     https://cotlet.dev/integrations/google-discover-api-mcp-server.md

How access works:
1. The user signs up at https://cotlet.dev/app/signup?app=google-discover, requests Google Discover in the Cotlet console and creates an API key there.
2. The user signs in to Google Discover once in their Cotlet Cloud Browser (their own Chrome in the cloud, opened from the console) and enables Google Discover for agents. An agent cannot do this step.
3. The API key goes into the MCP client or the REST call as a bearer token.

Fits: people who want a hosted Google Discover server that someone else maintains, including non-developers.

Policy: Cotlet never stores passwords, never solves CAPTCHAs, never bypasses MFA.
Company: legal details in the Terms of service at https://cotlet.dev/terms. Contact contact@cotlet.dev.
Sign-in: the user signs in to Google Discover in their own Cloud Browser, a Chrome Cotlet runs for them in the EU; password saving is off, the profile is AES-256-GCM encrypted, and agents get Google Discover only after the user enables it. Calls are requests from that browser's IP with its cookies, each listed in the user's Background activity. Disable for agents, signing out in the browser or Reset browser cuts access. Cotlet is run by Take Group sp. z o.o. (EU VAT PL6342984273).
API key: holds no Google Discover login or cookies, only asks Cotlet to run a tool. Each key is scoped to chosen apps and tools, read only or read and write. Actions that reach other people wait for the user's approval by default, so a leaked key cannot post or message as the user. Every call is in the activity log; deleting the key ends access at once.
Terms: the user stays responsible for following Google Discover's terms; Cotlet is not affiliated with Google Discover.
```

## What can an AI agent do in Google Discover?

Cotlet is best for publishers and SEOs who want to know what one signed-in account sees in Google Discover, tune that feed and report Discover clicks without running or fixing a server.

- **[Check if your site appears in Google Discover](https://cotlet.dev/integrations/google-discover-api-mcp-server/check-if-your-site-appears-in-google-discover.md)** (runs: daily): "Scan the top 40 cards of my Google Discover feed and tell me whether example-news.com appears. List the position, title, age and topic of each match." → `check_domain_in_feed`, `get_story_cluster`
- **[Weekly Google Discover performance report](https://cotlet.dev/integrations/google-discover-api-mcp-server/weekly-google-discover-performance-report.md)** (runs: weekly): "Pull last week's Discover clicks, impressions and CTR for example-news.com by day, name the best and worst day and list the top 3 pages." → `get_discover_performance`, `list_top_discover_pages`
- **[Hide publishers and topics from your Discover feed](https://cotlet.dev/integrations/google-discover-api-mcp-server/hide-publishers-from-your-discover-feed.md)**: "Read the top 30 cards of my Google Discover feed. Hide Example Daily News and mark every card about celebrity gossip as not interested. Then list what I have hidden." → `get_discover_feed`, `hide_publisher`, `mark_not_interested`, `list_hidden_items`, `unhide_item`
- **See which stories and publishers fill a Discover feed** (runs: weekly): "Read the top 50 cards of my Discover feed in the US and UK Cloud Browsers. Group them by publisher and topic and tell me who leads in each country." → `get_discover_feed`, `get_story_cluster`
- **Audit followed publishers and topics**: "List the publishers and topics my Google account follows. Unfollow every publisher that has no card in my top 50." → `list_followed_publishers`, `list_followed_topics`, `get_discover_feed`, `unfollow_publisher`

## Can Google Discover automations run on a schedule in n8n, Make or Zapier?

Yes. Cotlet does not replace your automation platform: it gives it a Google Discover connection it does not have, with the same API key as your agent. Write actions ask for your OK by default; switch that off in your dashboard for the tools you choose, for example to check if your site appears in google discover, and the schedule runs on its own. Cotlet runs in the cloud, so it keeps going while your computer is off.

| Where | How to connect | How to schedule |
|---|---|---|
| Your AI agent | Add https://cotlet.dev/mcp/v1 with your API key. | A scheduled agent run, for example a Claude Code routine. |
| n8n | MCP Client node with https://cotlet.dev/mcp/v1, or an HTTP Request node with the endpoint's method and URL, such as GET https://cotlet.dev/api/v1/google-discover/domain-in-feeds/check. | Schedule Trigger node. |
| Make | HTTP module: the endpoint's method and URL with an Authorization: Bearer header, and a JSON body for POST, PUT and PATCH. | Scenario schedule. |
| Zapier | Webhooks by Zapier, Custom Request: the same method, URL, header and body. | Schedule by Zapier trigger. |
| Your own script | GET https://cotlet.dev/api/v1/google-discover/domain-in-feeds/check with your API key. | cron or GitHub Actions. |

## Tools

**For AI agents:** Every endpoint and its schema is public. The 13 endpoints on this page, with parameters and example responses, can be listed without an account. Calling one returns 401 without an API key and 403 while the key has no access to Google Discover.

### get_discover_feed

The current cards of the feed the signed-in account sees. Access: read. REST: `GET /api/v1/google-discover/discover-feed`. MCP: `google_discover_read → get_discover_feed`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `limit` | integer | no | How many cards to return, counted from the top of the feed. |

Returns the cards from the top of the feed in the order shown: position, title, publisher, URL, age as the card shows it and topic. The feed is the mobile feed on google.com and in the Google app, for the signed-in account and the country of your Cloud Browser. It is one account's feed, not data from many users, and it changes through the day.

Example response:

```json
{
  "country": "US",
  "cards": [
    {
      "position": 1,
      "title": "Ten herbs that survive a cold windowsill",
      "publisher": "Example News",
      "url": "https://example-news.com/guides/windowsill-herbs",
      "age": "3h",
      "topic": "Home gardening"
    },
    {
      "position": 2,
      "title": "What a ten-minute stretch does for your back",
      "publisher": "Example Daily News",
      "url": "https://example-daily.com/health/ten-minute-stretch",
      "age": "5h",
      "topic": "Fitness"
    },
    {
      "position": 3,
      "title": "How to feed a sourdough starter",
      "publisher": "Example News",
      "url": "https://example-news.com/guides/sourdough-starter",
      "age": "1d",
      "topic": "Sourdough baking"
    }
  ]
}
```

### get_story_cluster

The more stories from the same event as one card. Access: read. REST: `GET /api/v1/google-discover/story-cluster`. MCP: `google_discover_read → get_story_cluster`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `url` | string | yes | URL of the card, as returned by get_discover_feed. |

Opens the more stories or full coverage group of a card and returns its stories in the order shown, each with title, publisher, URL and age. It returns an empty list when the card has no cluster. The card is identified by the URL from get_discover_feed.

Example response:

```json
{
  "url": "https://example-news.com/guides/sourdough-starter",
  "stories": [
    {
      "title": "How to feed a sourdough starter",
      "publisher": "Example News",
      "url": "https://example-news.com/guides/sourdough-starter",
      "age": "1d"
    },
    {
      "title": "Why your starter smells like acetone",
      "publisher": "Bread Notes",
      "url": "https://bread-notes.example/acetone-starter",
      "age": "2d"
    }
  ]
}
```

### check_domain_in_feed

Whether cards from a domain appear in the feed now, and where. Access: read. REST: `GET /api/v1/google-discover/domain-in-feeds/check`. MCP: `google_discover_read → check_domain_in_feed`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `domain` | string | yes | Bare host, e.g. example-news.com. |
| `limit` | integer | no | How many cards to scan from the top of the feed. |

Scans the top cards of the feed and returns every card whose URL is on the domain, with position, title, age and topic, and the number of cards scanned. in_feed is false when none matched. The answer holds for this account and this moment, not for every user.

Example response:

```json
{
  "domain": "example-news.com",
  "in_feed": true,
  "cards_scanned": 40,
  "matches": [
    {
      "position": 3,
      "title": "Ten herbs that survive a cold windowsill",
      "url": "https://example-news.com/guides/windowsill-herbs",
      "age": "3h",
      "topic": "Home gardening"
    },
    {
      "position": 11,
      "title": "How to feed a sourdough starter",
      "url": "https://example-news.com/guides/sourdough-starter",
      "age": "1d",
      "topic": "Sourdough baking"
    }
  ]
}
```

### list_followed_publishers

The publishers and creators this account follows. Access: read. REST: `GET /api/v1/google-discover/followed-publishers`. MCP: `google_discover_read → list_followed_publishers`.

No parameters.

Returns the publishers and creators the signed-in account follows, by name and domain where the app shows it. Follow from a card lets a signed-in user see more of a publisher or creator.

Example response:

```json
{
  "publishers": [
    {
      "name": "Example Daily News",
      "domain": "example-daily.com"
    },
    {
      "name": "Bread Notes",
      "domain": "bread-notes.example"
    }
  ]
}
```

### list_followed_topics

The topics this account follows in Discover. Access: read. REST: `GET /api/v1/google-discover/followed-topics`. MCP: `google_discover_read → list_followed_topics`.

No parameters.

Returns the topics listed under Following in Manage your interests, by name. Unfollowing a topic is done in the same place in the app.

Example response:

```json
{
  "topics": [
    "Home gardening",
    "Sourdough baking"
  ]
}
```

### list_hidden_items

What the account hid with Not interested or Don't show content from. Access: read. REST: `GET /api/v1/google-discover/hidden-items`. MCP: `google_discover_read → list_hidden_items`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `kind` | string | no | Filter: publisher or topic. Leave out for both. |

Returns the entries under Not interested in Manage interests, each marked as a publisher or a topic. Use unhide_item to bring one back. An empty list means nothing is hidden.

Example response:

```json
{
  "items": [
    {
      "kind": "publisher",
      "name": "Example Daily News"
    },
    {
      "kind": "topic",
      "name": "Celebrity gossip"
    }
  ]
}
```

### get_discover_performance

Discover clicks, impressions and CTR of your property, grouped by one dimension. Access: read. REST: `GET /api/v1/google-discover/discover-performance`. MCP: `google_discover_read → get_discover_performance`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `property` | string | yes | Search Console property: sc-domain:example.com for a Domain property, https://example.com/ for a URL-prefix property. |
| `start_date` | string | yes | First day, YYYY-MM-DD. |
| `end_date` | string | yes | Last day, YYYY-MM-DD. |
| `dimension` | string | no | date, page, country or device. Default date. |
| `country` | string | no | Filter by country code. |
| `device` | string | no | Filter by device: desktop, mobile or tablet. |

Reads the Search Console Discover report of your own property through the Search Analytics API (type=discover) and returns clicks, impressions and CTR per row. Rows are grouped by date, page, country or device. Grouped by date they come oldest first and days with no data are skipped. Data covers the last 16 months and only content that reached Google's minimum threshold of impressions.

Example response:

```json
{
  "property": "sc-domain:example-news.com",
  "dimension": "date",
  "rows": [
    {
      "date": "2026-10-12",
      "clicks": 1820,
      "impressions": 61200,
      "ctr": 0.0297
    },
    {
      "date": "2026-10-13",
      "clicks": 2140,
      "impressions": 70400,
      "ctr": 0.0304
    },
    {
      "date": "2026-10-14",
      "clicks": 2310,
      "impressions": 75100,
      "ctr": 0.0308
    },
    {
      "date": "2026-10-15",
      "clicks": 1980,
      "impressions": 66800,
      "ctr": 0.0296
    },
    {
      "date": "2026-10-16",
      "clicks": 2450,
      "impressions": 80900,
      "ctr": 0.0303
    },
    {
      "date": "2026-10-17",
      "clicks": 1640,
      "impressions": 55300,
      "ctr": 0.0297
    },
    {
      "date": "2026-10-18",
      "clicks": 1860,
      "impressions": 62100,
      "ctr": 0.03
    }
  ],
  "totals": {
    "clicks": 14200,
    "impressions": 471800,
    "ctr": 0.0301
  }
}
```

### list_top_discover_pages

The pages of your property with the most Discover clicks. Access: read. REST: `GET /api/v1/google-discover/top-discover-pages`. MCP: `google_discover_read → list_top_discover_pages`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `property` | string | yes | Search Console property: sc-domain:example.com for a Domain property, https://example.com/ for a URL-prefix property. |
| `start_date` | string | yes | First day, YYYY-MM-DD. |
| `end_date` | string | yes | Last day, YYYY-MM-DD. |
| `limit` | integer | no | How many pages to return. |

Returns pages ordered by clicks, highest first, with clicks, impressions and CTR, from the same Discover report. It reads your own property only; Google does not support byProperty aggregation for Discover.

Example response:

```json
{
  "property": "sc-domain:example-news.com",
  "rows": [
    {
      "page": "https://example-news.com/guides/windowsill-herbs",
      "clicks": 3920,
      "impressions": 118000,
      "ctr": 0.0332
    },
    {
      "page": "https://example-news.com/guides/sourdough-starter",
      "clicks": 2610,
      "impressions": 91500,
      "ctr": 0.0285
    },
    {
      "page": "https://example-news.com/guides/composting-basics",
      "clicks": 1890,
      "impressions": 64200,
      "ctr": 0.0294
    }
  ]
}
```

### follow_publisher

Follow a publisher or creator in this account's Discover. Access: write. REST: `POST /api/v1/google-discover/publisher/follow`. MCP: `google_discover_write → follow_publisher`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `publisher` | string | yes | Publisher name as the card shows it, e.g. Example Daily News, or its domain. |

Follows the publisher from its card or page, so the account sees more of it. Returns the publisher and its status. Undo with unfollow_publisher. It changes only your own feed, reaches nobody and is undone in one call, so it does not ask for confirmation.

Example response:

```json
{
  "publisher": "Example Daily News",
  "status": "following"
}
```

### unfollow_publisher

Stop following a publisher or creator. Access: write. REST: `POST /api/v1/google-discover/publisher/unfollow`. MCP: `google_discover_write → unfollow_publisher`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `publisher` | string | yes | Publisher name as the card shows it, e.g. Example Daily News, or its domain. |

Taps Following next to the publisher and returns its new status. Undo with follow_publisher. It changes only your own feed, reaches nobody and is undone in one call, so it does not ask for confirmation.

Example response:

```json
{
  "publisher": "Example Daily News",
  "status": "not_following"
}
```

### hide_publisher

Stop showing content from a publisher in this feed. Access: write. REST: `POST /api/v1/google-discover/publisher/hide`. MCP: `google_discover_write → hide_publisher`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `publisher` | string | yes | Publisher name as the card shows it, e.g. Example Daily News, or its domain. |

Uses Don't show content from on a card of the publisher, which removes the source from this account's feed. It returns the publisher and its status. Undo with unhide_item. It changes only your own feed, reaches nobody and is undone in one call, so it does not ask for confirmation.

Example response:

```json
{
  "publisher": "Example Daily News",
  "status": "hidden",
  "undo": "unhide_item"
}
```

### mark_not_interested

Stop showing a topic in this feed, from one of its cards. Access: write. REST: `POST /api/v1/google-discover/not-interested/mark`. MCP: `google_discover_write → mark_not_interested`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `url` | string | yes | URL of a card with the topic, as returned by get_discover_feed. |
| `topic` | string | yes | Topic as the card shows it, e.g. Celebrity gossip. |

Uses Not interested in the topic on the card you name. Returns the topic and its status. Undo with unhide_item. It changes only your own feed, reaches nobody and is undone in one call, so it does not ask for confirmation.

Example response:

```json
{
  "topic": "Celebrity gossip",
  "status": "hidden",
  "undo": "unhide_item"
}
```

### unhide_item

Bring back a hidden publisher or topic. Access: write. REST: `POST /api/v1/google-discover/item/unhide`. MCP: `google_discover_write → unhide_item`.

| Parameter | Type | Required | Description |
|---|---|---|---|
| `kind` | string | yes | publisher or topic. |
| `name` | string | yes | Publisher or topic name as list_hidden_items shows it. |

Taps Unhide next to the item under Not interested in Manage interests. Undoes hide_publisher and mark_not_interested. It changes only your own feed, reaches nobody and is undone in one call, so it does not ask for confirmation.

Example response:

```json
{
  "kind": "publisher",
  "name": "Example Daily News",
  "status": "visible"
}
```

## How do I connect Google Discover to Claude Code, Codex or Cursor?

Connecting Google Discover takes three steps: sign up, sign in to Google Discover once in your Cloud Browser and enable it for agents, then add one MCP server or call the REST API with the same key.

### Connect Google Discover to your agent.

1. **Create an account** Sign up and add Google Discover in the console. Your API key is there too.

2. **Sign in to Google Discover in your Cloud Browser** Open your Cloud Browser in the console: your own Chrome in the cloud. Sign in to Google Discover there yourself, the way you always do, then press Enable for agents, read only or read and write. We never save your password, and your agent keeps working even when your computer is off.

3. **Add Cotlet to your agent** Paste the snippet for your client. The same server and key serve every app you connect, so you do this once.

   Claude Code:

```
claude mcp add --transport http cotlet \
  https://cotlet.dev/mcp/v1 \
  --header "Authorization: Bearer $COTLET_API_KEY"
```

   Cursor:

```
{
  "mcpServers": {
    "cotlet": {
      "url": "https://cotlet.dev/mcp/v1",
      "headers": {
        "Authorization": "Bearer ${COTLET_API_KEY}"
      }
    }
  }
}
```

   Codex:

```
# ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY"
```

4. **Ask your agent** Ask in plain words. Your agent finds the Google Discover tools on the server and calls them for you; anything that reaches other people waits for your OK unless you switch that off for a tool.

```
Scan the top 40 cards of my Google Discover feed and tell me whether example-news.com appears. List the position, title, age and topic of each match.
```

### Call Google Discover from your scripts.

1. **Export your API key** Your scripts use the same API key as your agent. Keep it in an environment variable, never in your code.

```
export COTLET_API_KEY="cotlet_..."
```

2. **Call a tool** Every tool is an endpoint under /api/v1/google-discover with its own method and path, listed with the endpoints above. Path parameters go in the URL; the other parameters go in the query for GET and DELETE and in a JSON body otherwise.

```
curl -X POST https://cotlet.dev/api/v1/google-discover/publisher/follow \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"publisher":"Example Daily News"}'
```

3. **Read the result** You get plain JSON back, ready for your script. A failed call costs nothing.

```
{
  "publisher": "Example Daily News",
  "status": "following"
}
```

## Why use Cotlet for Google Discover?

**Built for agents**

- One MCP server for every app you connect.
- The same tools as a REST API for scripts and cron jobs.
- Works with Claude Code, Codex and Cursor.

**Your login stays yours**

- You sign in to Google Discover yourself, in your own Cloud Browser. We never save your password; the profile is encrypted with AES-256-GCM, the cipher 1Password uses.
- A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory.
- The model never sees a login.
- No stored passwords, no CAPTCHA solving, no MFA bypass.

**You stay in control**

- Scope each API key: its apps, its tools, read only or read and write.
- Anything that reaches other people waits for your OK, so a leaked key cannot post or message as you.
- Every background request listed in your Background activity. Disable for agents in one click.

**Kept working for you**

- We test every integration every 6 hours.
- When Google Discover changes, the tool pauses until we fix it.
- Failed calls cost nothing.

## Is it safe to connect Google Discover to Cotlet?

Yes. You sign in to Google Discover yourself, in your own Cloud Browser, and we never save your password. Your agents only get Google Discover once you enable it, and every background request is listed. The browser profile is stored encrypted with AES-256-GCM, the same cipher 1Password uses for its vaults and Apple for iCloud Keychain. Independent public scanners grade cotlet.dev A+ and find it clean; click a result to rerun it yourself.

- **A+ on Qualys SSL Labs**: Encryption in transit: TLS setup and certificates, on all four server addresses. [Live result](https://www.ssllabs.com/ssltest/analyze.html?d=cotlet.dev)
- **A+ on securityheaders.com**: Browser protections sent with every page, all six headers present. [Live result](https://securityheaders.com/?q=cotlet.dev&followRedirects=on)
- **A+ on Mozilla Observatory**: Mozilla's web security baseline: score 120 of 100, 12 of 12 tests passed. [Live result](https://developer.mozilla.org/en-US/observatory/analyze?host=cotlet.dev)
- **Clean on Sucuri SiteCheck**: No malware, spam or defacement, and not on any of 9 blocklists, Google Safe Browsing included. [Live result](https://sitecheck.sucuri.net/results/cotlet.dev)

[How Cotlet protects your access](https://cotlet.dev/security.md)

### Common concerns

**Who runs Cotlet?**

Cotlet is run by Take Group, a Polish software company working since 2019. Take Group runs about 3,200 websites on its own systems and has its own DevOps team for infrastructure security. We built and used integrations like this inside the company for years before opening them as Cotlet.

**Is this an official Google Discover integration?**

No, Cotlet is independent of Google Discover. Google Discover's own API is too limited for this work. Cotlet works through your own Google Discover account, the way you use Google Discover in the browser, so you need no partner approval and no developer setup.

**What about client data and GDPR?**

Cotlet is run from the EU and follows the GDPR. Cloud Browsers run in Finland, a Tier 1 country in the ITU Global Cybersecurity Index 2024. Data passes through a call and is not kept after it.

**Can I start with read only?**

Yes. Enable the app for agents as read only, or make the API key read only, and anything that reaches other people waits for your OK unless you switch that off per tool.

**Is it reliable?**

Every Cotlet service is checked every 3 minutes from Europe, North America, Asia and Australia. The live results and any outage are public at status.cotlet.dev.

**How do I stop?**

Press Disable for agents next to Google Discover in your console: your agents lose access at once and you stay signed in. Signing out of Google Discover in the browser works too, and Reset browser deletes the whole profile.

## Is there a Google Discover MCP server on GitHub?

No ready option reads the feed from your own account. Paid Discover analytics panels sell feed data collected from a panel of many users, which is a different product. Doing it by hand means opening the Google app and scrolling. Cotlet reads the feed one signed-in account sees, in the country of your Cloud Browser, and can follow, hide and report on it for you.

|  | By hand in the Google app | Cotlet |
|---|---|---|
| Setup | Sign in to Google in the app on a phone | Sign up, sign in to Google once in your Cloud Browser, add one MCP server or API key |
| What you see | The feed of one account, in the country of your phone | The feed of one account, in the country of your Cloud Browser; several Cloud Browsers give several feeds |
| When Google changes the app | You learn the new layout yourself | Our team tests it daily and fixes it for you; failed calls are free |
| Your Google session | On your phone | In your own Cloud Browser in the EU, profile encrypted, only for the apps you enable, disabled for agents in one click |
| When the session expires | You sign in again | If Google signs you out, your agent gets a link to sign in again |
| Where it runs | On your phone, when you open it | Hosted: Claude Code, Codex, Cursor, n8n and scripts, also on a schedule |
| Price | Free, paid for with your time | Free 7-day trial, then pay-as-you-go credit packs, no subscription |

### Which one fits you

**Pick Cotlet if**

- you are not a developer, or you do not want to maintain a server
- you need it to keep working when Google Discover changes, without checking it yourself
- your agent or a script should run it on a schedule, also while your computer is off

**Pick an open-source server if**

- you are comfortable installing, updating and fixing it yourself
- you want your sign-in to stay on your own computer
- you only need it now and then, from one MCP client

## How much does the Google Discover API cost?

Free 7-day trial with 2,000 credits, no card needed. After that, the Google Discover API is pay as you go with no limit on apps: Credit packs from $29 for 5,000 credits, one-time, no subscription. A successful call uses 20 to 30 credits (25 for most tools, about $0.10 to $0.15), your Cloud Browser uses 50 credits a day while it has an app enabled for agents, however many apps that is, and an agent driving the browser itself uses 5 credits a minute. Credit packs stay valid for 12 months and stack, so unused credits carry over.

| Credits | Price, one time | Calls at 25 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 200 | $5.80 |
| 15,000 | $79 | 600 | $5.27 |
| 32,000 | $149 | 1,280 | $4.66 |
| 60,000 | $249 | 2,400 | $4.15 |

Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the `Authorization: Bearer` header. [See full pricing](https://cotlet.dev/pricing.md)

## How Cotlet holds your access

Cotlet hosts MCP servers and REST APIs for apps with no usable API. Your agent works in your own Google Discover account.

- **Company details:** Cotlet is run by Take Group sp. z o.o., a company registered in Poland. Its full address and registration numbers are in the Terms of service. [Terms of service](https://cotlet.dev/terms)
- **Your sign-in:** You sign in to Google Discover yourself, in your own Cloud Browser: a Chrome we run for you in the EU, one per app. We never save your password (password saving is off), the profile is stored encrypted with AES-256-GCM, and your agents get Google Discover only after you enable it. When Google Discover signs you out, your agent gives you a link to sign in again. [Security](https://cotlet.dev/security.md)
- **Revoking access:** Press Disable for agents next to Google Discover, sign out of Google Discover in your Cloud Browser, or reset the browser. Every background request is listed in your Background activity. Actions that reach other people wait for your OK unless you switch that off per tool.
- **What we never do:** Store passwords, solve CAPTCHAs or bypass MFA.
- **Google Discover's terms:** You use your own Google Discover account and stay responsible for following Google Discover's terms. Cotlet is independent and not affiliated with Google Discover. [Terms](https://cotlet.dev/terms)
- **Contact:** Questions about the company, security or an app: [contact@cotlet.dev](mailto:contact@cotlet.dev)

## Frequently asked questions

**How do I get access?**

Sign up free, open Google Discover in the console and press Request access. Then you create your API key and connect Google Discover there.

**Do I need to be technical?**

No. You sign in to Google Discover once in your Cloud Browser, a normal Chrome you open from the console, and paste one command into your agent, or one URL into n8n. Your agent can walk you through it. There is no server to install, update or fix.

**Is it safe to connect Google Discover to Cotlet?**

Yes. You sign in to Google Discover yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Google Discover once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

**Is a hosted server safer than a local one? My Google Discover sign-in would leave my computer.**

On Cotlet you sign in inside your own Cloud Browser, which only you open, and its profile is stored encrypted with AES-256-GCM in the EU. Agents get only the apps you enable, and every background request is listed. A local server keeps your Google Discover cookie in a plain file on your computer, readable by any program you run, and stops when your computer is off.

**Why does Cotlet send requests instead of clicking in my browser?**

To be fast, Cotlet doesn't click through Google Discover's pages. It sends the same requests your browser would, from your browser's IP with its cookies, without opening a window. Google Discover sees the same browser and IP you signed in with, and every request is listed in your Background activity.

**What if someone gets my Cotlet API key?**

The key holds no Google Discover login or cookies, it only asks Cotlet to run a tool. It can call only the apps and tools you gave it, and a read-only key changes nothing. Anything that reaches other people, like posts, comments or messages, waits for your OK in the dashboard by default, so a leaked key cannot post or message as you. When you switch approval off for a scheduled job, give that job its own key limited to that one tool. Every call is in your activity log, and deleting the key ends access at once.

**Why a signed-in browser and not OAuth, like other integration platforms?**

Google Discover offers no OAuth token you can simply grant for these tools: its official API leaves them out or needs a developer app, a plan or an approval first (see the official API section above). That is why Cotlet sets the limits itself: per key, per tool, with your approval before anything reaches other people. Cotlet is run by Take Group sp. z o.o., an EU company (VAT PL6342984273).

**Is this the same data as a paid Discover analytics panel?**

No. A panel sells feed data collected from many users. Cotlet reads the feed of the one Google account you sign in with, in the country of your Cloud Browser. Several Cloud Browsers in different countries give several feeds. The Search Console tools read your own properties only.

**Why is a page missing from the Discover performance report?**

Google shows Discover data for the last 16 months, and only for content whose impressions reached a minimum threshold. A page below it does not appear in get_discover_performance or list_top_discover_pages. Google also says being eligible for Discover is not a guarantee of appearing.

**Does it read the desktop Discover feed?**

No. The tools read the mobile feed on google.com and in the Google app. Google's help lists the Google app and google.com in an Android browser as places Discover is available.

**Can my agent post or send messages in Google Discover without asking me?**

No. Every call to undefined waits for your OK by default. For scheduled automations you can switch confirmation off per tool in your dashboard, for example only for approvals. follow_publisher, unfollow_publisher, hide_publisher, mark_not_interested, unhide_item runs without asking, because it sends nothing to anyone and one call undoes it.

**Can I use the Google Discover API in n8n?**

Yes. Add https://cotlet.dev/mcp/v1 with your API key in n8n's MCP Client node, or call its endpoints under https://cotlet.dev/api/v1/google-discover from the HTTP Request node.

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
