# Google News API & URL Decoder: Real Article URLs (`hiver/google-news-scraper`) Actor

Google News API and URL decoder: search any keyword or topic in any country, or paste news.google.com/rss/articles links or RSS feed URLs, and get the publisher's real article URL as JSON (searches add title, date, snippet). $0.80 per 1,000 decoded links; failures free. Unofficial.

- **URL**: https://apify.com/hiver/google-news-scraper.md
- **Developed by:** [hiver](https://apify.com/hiver) (community)
- **Categories:** News, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.26 / 1,000 news article returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google News API & URL decoder: real article URLs

**An API for Google News: send a keyword, a full Google News query or a topic section, for any country and language edition, and get JSON back.** One row per article: title, publisher, the publisher's **real article URL** (Google News RSS links are encoded `news.google.com` redirects; this Actor decodes them), publish time, snippet, image and the search that found it. Switch on **only new since last run** and schedule it to monitor a brand, a topic or a keyword.

**Already have `news.google.com/rss/articles/...` links?** Paste them (or a Google News RSS feed URL) into `articleUrls` and get one row per link with the publisher's article URL, at $0.80 per 1,000 decoded links. Links that cannot be decoded come back as free rows with the reason (for example `not_decoded: Google rate-limited, retry later`) and the run still succeeds. See [Decode Google News links](#decode-google-news-links) below, or use the free [decoder script (Python, CSV out)](https://github.com/hiver-data/google-news-alerts/tree/main/decoder?utm_source=apify\&utm_campaign=google-news-decoder).

Google has no official Google News API: it retired its News Search API (deprecated 2011, switched off 2016). This Actor reads the public Google News RSS feeds instead and is called like any API (Python, JavaScript or plain HTTP, below).

![Google News API on the Apify Store: keyword searches and topic sections in any country and language, then the bench table](https://raw.githubusercontent.com/hiver-data/google-news-alerts/main/media/google-news/readme.gif)

[Watch the 1.5-minute walkthrough (MP4)](https://github.com/hiver-data/google-news-alerts/blob/main/media/google-news/walkthrough.mp4) · [Free example on GitHub: daily Google News alerts to Slack or Discord](https://github.com/hiver-data/google-news-alerts)

*Unofficial. Not affiliated with, endorsed by or sponsored by Google or Microsoft. It reads the public Google News and Bing News RSS feeds, with no login, at a polite pace (about 2 requests a second to Google at most), and never tries to get around a block. Article titles and snippets belong to their publishers; check the terms of the feeds and sites before you republish them.*

### Measured against the alternatives

Our board's Lab bench gives this Actor and two of the most-used Google News Actors on the Apify Store the same two searches, past 7 days: one in the US English edition, one in the German edition. Answers are checked against 14 facts read by hand from the Google News feed and the publishers' own pages (article URL, publisher, date, snippet, image). The two latest runs, 2026-10-10:

| | This Actor | Most-used Google News Actor | Another popular Google News Actor |
|---|---|---|---|
| Facts matched, 05:24 UTC run (our build 0.1.11) | **14 of 14** | 4 of 14 | 4 of 14 |
| Facts matched, 03:46 UTC run (our build 0.1.9) | 12 of 14 | **14 of 14** | 4 of 14 |
| Fields filled, 05:24 / 03:46 UTC | **86%** / 83% | 67% / **87%** | 83% / 83% |
| Price per 1,000 articles in these runs | **$1.63** | $4.00 | $2.67 |
| Run time per search, 05:24 UTC | 10.4 s | 17.2 s | **2.8 s** |

Our article URL, publisher and date checks matched in both runs, at less than half the most-used Actor's price. The most-used one has a link-decoding option (on in both runs): at 03:46 UTC it decoded its `news.google.com` links and filled one snippet and one image we missed; at 05:24 UTC it returned the encoded `news.google.com/rss/articles/...` links, so its URL checks failed. The other alternative matched 4 of 14 in both runs (encoded links at 05:24 UTC), and it is much faster. Two searches is a small sample; the bench runs again after every new build.

### Use it as a Google News API

Get your Apify API token (free account; Apify Console > Settings > API & Integrations), then:

**Python** (`pip install "apify-client>=3.2"`)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hiver/google-news-scraper").call(run_input={
    "queries": ["electric vehicles"],
    "country": "US", "language": "en",
    "timeWindow": "day", "maxItems": 50,
})
for article in client.dataset(run.default_dataset_id).iterate_items():
    print(article["publishedAt"], article["publisher"], article["url"])
```

**HTTP** (one call, waits for the run and returns the rows as JSON)

```bash
curl -X POST "https://api.apify.com/v2/acts/hiver~google-news-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["electric vehicles"], "timeWindow": "day", "maxItems": 20}'
```

Add `&format=csv` to that URL for CSV. The same input works from JavaScript (`apify-client`), Make, Zapier, n8n and Apify schedules.

### Decode Google News links

Paste encoded article URLs into `articleUrls`, or supply a Google News RSS feed URL:

```json
{
  "articleUrls": ["https://news.google.com/rss/search?q=business&hl=en-US&gl=US&ceid=US:en"],
  "maxItems": 20
}
```

Article URL paths `/rss/articles/<id>`, `/articles/<id>` and `/read/<id>` are accepted, with or without query strings. `/rss/search`, `/rss/topics` and `/rss/headlines` feeds expand into item links in feed order. Duplicate article IDs are returned once, in first-input order. `queries` and `topics` are optional; if supplied too, links run first and all modes share `maxItems`.

Set `maxItems` to at least the number of links you paste (default 50, up to 5,000): it caps the rows of the whole run, and error rows count toward it.

Each link row has `inputUrl`, `url`, `urlResolved`, `publisherDomain` and `status`. Status is `decoded`, `not_google_news_link`, or `not_decoded: <reason>`; an unresolved publisher URL is null. Feed items also carry title, publisher and UTC publication date; directly pasted articles leave these three fields null. The Output tab has a **Decoded Google News links** view.

This mode never fetches publisher pages, snippets or Bing, regardless of `addSnippets`. Only successful rows charge `decoded-link`; duplicates and error rows are free. Query/topic rows continue to charge `article`. Google requests keep the existing pacing and backoff; after repeated 429/503 or sorry responses, remaining links produce free `not_decoded: Google rate-limited, retry later` rows and the run finishes successfully. No IP rotation or block bypass.

**A real run.** The board's test run of build 0.1.16 (2026-10-12, run `OWYXDZh9msX4hICmK`, 512 MB) got 8 links: 5 Google News article links, the first one again without `?oc=5`, a made-up article id and a non-Google URL. It returned 7 rows in 15 seconds: the 5 publisher URLs below (the Lab checked each against the expected article), the repeated link once, and 2 free error rows. Apify recorded 5 `decoded-link` charges and no `article` charges.

| `inputUrl` (shortened) | `url` | `status` |
|---|---|---|
| news.google.com/rss/articles/CBMiowFB...?oc=5 | https://www.scotusblog.com/2026/10/trump-announces-committee-investigation-of-fed-governor-lisa-cook/ | `decoded` |
| news.google.com/rss/articles/CBMipwFB...?oc=5 | https://www.aljazeera.com/economy/2026/10/9/trump-launches-probe-into-federal-reserve-governor-lisa-cook | `decoded` |
| news.google.com/articles/CBMiiAFB... | https://www.nbcnews.com/business/economy/trump-probe-fed-gov-lisa-cook-rcna602500 | `decoded` |
| news.google.com/rss/articles/CBMib0FV...?oc=5 | https://www.cnbc.com/2026/10/09/american-debt-delinquency.html | `decoded` |
| news.google.com/rss/articles/CBMi1wFB...?oc=5 | https://www.deutschlandfunk.de/bundesbank-vorstandsmitglied-theurer-sieht-noch-keine-systemische-staatsschuldenkrise-aber-warnsigna-100.html | `decoded` |
| news.google.com/rss/articles/CBMiNOTAREALID... | null | `not_decoded: Google did not return a publisher URL` |
| example.com/news/story | null | `not_google_news_link` |

Google decides how fast it answers. In the board's run of the previous build 25 minutes earlier (0.1.15, same 8 links), Google refused that worker's requests from the start: no link was decoded, all 7 rows came back free (`not_decoded: Google rate-limited, retry later` for 5 of them), nothing but the run start was charged, and the run still ended as succeeded after 102 seconds. Re-send such rows later.

**From Python (for `googlenewsdecoder` users):** same token and client as above.

```python
run = client.actor("hiver/google-news-scraper").call(run_input={
    "articleUrls": links,  # news.google.com/rss/articles/... links and/or RSS feed URLs
    "maxItems": 1000,  # row cap for the whole run: error rows count, a feed URL adds one row per item
})
for row in client.dataset(run.default_dataset_id).iterate_items():
    print(row["status"], row["url"])  # url is None unless status == "decoded"
```

### What it does

- **Searches:** plain keywords or Google News operators: `"exact phrase"`, `OR`, `-exclude`, `intitle:`, `site:`, `source:`. Many searches per run; each row says which search found it (`query`), and an article found by several searches is returned once (`allQueries`).
- **Topic sections:** Top stories, World, Nation, Business, Technology, Entertainment, Sports, Science, Health, for the edition you choose.
- **Editions:** any `country` + `language` pair Google News offers (US/en, GB/en, DE/de, FR/fr, BR/pt, JP/ja, IN/en ...).
- **Time window:** past hour, 24 hours, 7 days, 30 days, 90 days or a year.
- **More than 100 per search:** one Google News request returns about 100 articles. For bigger limits the Actor splits the window into days and asks again, de-duplicating (test: `electric vehicles`, 30 days, limit 250 returned 250 articles, 247 distinct headlines, in 12 seconds without link resolving).
- **Publisher URLs:** Google's links are encoded redirects. By default each is resolved to the real article URL and publisher domain (`urlResolved`). A link that cannot be resolved is kept and flagged `urlResolved: false`, never silently dropped.
- **Snippets and images:** `addSnippets` is on by default. For each resolved article, one normal GET reads `meta name=description` (or `og:description`) into `snippet` and `og:image` into `imageUrl`. Bing descriptions are fallback when metadata is missing. Three workers share a six-second metadata budget and read at most 512 KiB per page. Only HTTP 200 HTML is parsed; 401/403/429 or recognized challenges leave both fields null. No retries, redirect following, login, proxies or bypass. Turning this option off skips Bing and article metadata.
- **Publisher filters:** keep or drop domains, for example only `reuters.com`, or no `msn.com`.
- **Monitor mode:** `onlyNew` + `monitorId` returns only articles that earlier runs with that ID did not return. The first run is the baseline. Use Apify schedules and webhooks for alerts, or the ready-made Slack/Discord alert repo in the FAQ.
- **Hard limits:** `maxItems` stops the whole run (and billing) exactly there; `maxItemsPerQuery` limits each search. Newest first by default.

### Output (one row per article: a real bench row, build 0.1.11, 2026-10-10, German edition)

```json
{
  "query": "Lufthansa A340-600",
  "title": "Lufthansa verabschiedet den Airbus A340-600",
  "publisher": "airliners.de",
  "publisherUrl": "https://www.airliners.de",
  "publisherDomain": "airliners.de",
  "url": "https://www.airliners.de/lufthansa-verabschiedet-airbus-a340-600/90593",
  "urlResolved": true,
  "publishedAt": "2026-10-05T08:30:00Z",
  "snippet": "Lufthansa mustert den Airbus A340-600 aus: Der letzte Linienflug LH419 landet am 19. Oktober in Frankfurt. ...",
  "imageUrl": "https://images.airliners.de/2024/10/presseburo-spath-026-KLBCAa__wide__1320?v=1729069132",
  "sourceFeeds": ["google", "bing"],
  "allQueries": ["Lufthansa A340-600"],
  "edition": "DE:de"
}
```

Topic rows have `topic` set instead of `query`. A run with no results writes one row with a `note` explaining why; it is not charged.

### Pricing

Pay per event: **$0.0018 per article returned** by a search or topic ($1.80 per 1,000), and **$0.0008 per Google News link decoded** in `articleUrls` mode ($0.80 per 1,000; link mode reads no publisher pages, snippets or images). Notes, errors, duplicate links and already-seen articles in only-new mode are free. Set `maxItems` to cap the cost.

### Speed

Default input (2 searches + 1 section, 40 articles, links resolved): about 1 minute. Link mode: the board's 8-link test run above took 15 seconds in total. Resolving costs about 1 second per article; turn `resolvePublisherUrl` off for roughly 10x faster runs.

### Good to know

- Google News shows what Google News shows: results depend on the edition and change minute to minute. The Actor does not rank or filter beyond what you set.
- Section feeds return the current headlines of the edition; the time window trims them but cannot reach back further than the feed holds.
- Dates are UTC. Rows are not de-duplicated across different runs unless `onlyNew` is on.
- If Google or Bing refuse requests, the Actor backs off, stops using that host for the rest of the run and says so in the log or the `note` row. It does not try to bypass the block.
- For a list of companies with name disambiguation use Company News Monitor from the same publisher.

### Pricing table & example

Pay per event. Prices per 1,000 events, by Apify plan (higher plans get a discount automatically):

| Event | Free | Starter (Bronze) | Scale (Silver) | Business (Gold) |
|---|---|---|---|---|
| News article returned (`article`) | $1.80 | $1.62 | $1.44 | $1.26 |
| Google News link decoded (`decoded-link`) | $0.80 | $0.70 | $0.65 | $0.60 |

**Worked example:** 5,000 billable `article` events on the Free plan cost 5,000 × $0.0018 = **$9.00**; on Gold, 5,000 × $0.00126 = $6.30. Decoding 10,000 Google News links on the Free plan costs 10,000 × $0.0008 = **$8.00**. Rows that the Price section lists as free cost nothing. Apify platform usage is included in these prices.

### Input example

```json
{
  "queries": [
    "artificial intelligence regulation",
    "\"supply chain\" AND semiconductors"
  ],
  "topics": [
    "TECHNOLOGY"
  ],
  "country": "US",
  "language": "en",
  "timeWindow": "week",
  "maxItemsPerQuery": 15,
  "maxItems": 40
}
```

### FAQ

**Is there an official Google News API?**\
No. Google retired its News Search API (deprecated 2011, switched off 2016). The public Google News RSS feed still exists but gives encoded `news.google.com` links and no snippets; this Actor turns that feed into JSON rows with the publisher's URL, snippet and image.

**How do I turn a news.google.com link into the real article URL?**\
Paste it into `articleUrls` (a list of links, or a Google News RSS feed URL): each row's `url` is the publisher's article URL, at $0.80 per 1,000 decoded links, and a link that cannot be decoded comes back free with the reason in `status`. When you search by keyword or topic instead, leave `resolvePublisherUrl` on (the default): each article's Google link is decoded the same way, and one that cannot be decoded is kept and flagged `urlResolved: false`, never dropped.

**Using the `gnews` Python package and getting `news.google.com` links?**\
`gnews` reads the same Google News RSS feed, so `get_news()` returns the encoded `news.google.com/rss/articles/...` links (a default install of gnews 0.8.3 on 2026-10-12 returned 20 of 20 links in that form); its README says real article URLs need its Playwright extra (a headless Chromium) or a SearchApi key. Send the same keyword in `queries` here and each row's `url` is already the publisher's article URL, or paste the links you already have into `articleUrls`. Ready-made example: [gnews real article URLs](https://apify.com/hiver/google-news-scraper/examples/gnews-real-article-urls).

**What happens when Google answers HTTP 429?**\
The Actor paces its requests to Google and backs off. If Google keeps refusing, the remaining links come back as free `not_decoded: Google rate-limited, retry later` rows and the run still succeeds. It does not rotate IPs or try to get around the refusal, so send those links again later.

**How many articles per search?**\
One Google News request returns about 100. For larger limits the Actor splits the time window into days; the total is also bounded by what the news feed holds.

**Why do some rows have no snippet?**\
Google News feeds carry none. By default the Actor reads the resolved publisher page's description and thumbnail metadata; Bing descriptions are fallback. Missing tags, redirects, refusals, challenges and the six-second metadata budget can leave `snippet` or `imageUrl` null. On the 2026-10-10 05:24 UTC bench (build 0.1.11) every hand-checked snippet and image matched; on the earlier 03:46 UTC run (build 0.1.9) one US article's snippet and image were missing.

**Can I monitor a topic?**\
Yes: only-new plus a monitor ID, on an Apify schedule. The first run is the baseline. For alerts in Slack, Discord or a daily Markdown digest, the free [google-news-alerts](https://github.com/hiver-data/google-news-alerts?utm_source=apify\&utm_campaign=google-news-alerts) repo runs this Actor from GitHub Actions once a day, posts only articles it has not sent before and links each one to the publisher's article (Python, MIT, 20 offline tests).

**Is this official?**\
No. Unofficial and not affiliated with, endorsed by or sponsored by any company or site named in the results or this README.

**Something looks wrong or you need a field added?**\
Open an issue from the Actor's Issues tab with the input and run link.

# Actor input Schema

## `articleUrls` (type: `array`):

Paste news.google.com/rss/articles/<id>, /articles/<id>, or /read/<id> links (query strings optional), or /rss/search, /rss/topics, /rss/headlines feed URLs. Feeds expand in feed order; duplicate article IDs collapse. Queries/topics are optional when links are given; combined runs decode links first. No Bing, snippet or publisher-page fetch for these links. Only decoded rows charge decoded-link; errors are free. maxItems caps the whole run.

## `queries` (type: `array`):

One search per line. Plain keywords (`electric vehicles`) or full Google News queries: `"exact phrase"`, `OR`, `AND`, `-exclude`, `intitle:merger`, `site:reuters.com`, `source:"The Verge"`. Each search runs separately and every row says which one found it. Optional when articleUrls or topics are supplied.

## `topics` (type: `array`):

Headline sections of your country and language edition, read in addition to the searches. Leave empty to use searches only. Optional when articleUrls are supplied.

## `country` (type: `string`):

Two-letter country code of the Google News edition, for example US, GB, DE, FR, IN, BR, JP.

## `language` (type: `string`):

Two-letter language code, for example en, de, fr, es, pt, ja. Match it to the country (DE + de, BR + pt).

## `timeWindow` (type: `string`):

Only articles published inside this window, including `month` (30 days) and `quarter` (90 days).

## `maxItems` (type: `integer`):

Hard total row limit after deduplication across pasted links, expanded feeds and searches. Links are processed first; errors also occupy a row. Only decoded links and returned search articles are billed.

## `maxItemsPerQuery` (type: `integer`):

Limit for each search. One Google News request returns about 100 articles; for larger limits the Actor splits the time window into days and asks again.

## `sortBy` (type: `string`):

`date` keeps the newest articles when a limit applies. `relevance` keeps Google's own order.

## `resolvePublisherUrl` (type: `boolean`):

Google News links are encoded redirects (news.google.com/rss/articles/...). When on, each is resolved to the real article URL. Slower, about 1 second per article. Links that cannot be resolved keep the Google link and `urlResolved: false`. Applies to query/topic results only; pasted links always attempt decoding.

## `addSnippets` (type: `boolean`):

On by default: fill snippet from the resolved publisher page's description or og:description, and imageUrl from og:image. One direct GET per unique article, three workers, six seconds total for metadata. Refusals/challenges leave both fields null; no retries or redirect following. Bing descriptions are fallback for missing metadata. Disable to skip both Bing and publisher metadata. Pasted articleUrls never fetch publisher pages or Bing, regardless of this setting.

## `onlyPublishers` (type: `array`):

Keep only articles from these domains, for example `reuters.com`, `bbc.co.uk`. Needs publisher URLs: matched on the publisher site shown by Google News.

## `excludePublishers` (type: `array`):

Drop articles from these domains, for example `msn.com`, `yahoo.com`.

## `onlyNew` (type: `boolean`):

Return only articles that earlier runs with the same Monitor ID did not return. The first run returns everything and becomes the baseline. Schedule the Actor (hourly, daily) and connect a webhook or integration to get alerts.

## `monitorId` (type: `string`):

Name of the saved list of seen articles (letters, numbers, dashes). Use a different ID for every list you monitor.

## Actor input object example

```json
{
  "articleUrls": [
    "https://news.google.com/rss/search?q=business&hl=en-US&gl=US&ceid=US:en"
  ],
  "queries": [
    "artificial intelligence regulation"
  ],
  "country": "US",
  "language": "en",
  "timeWindow": "week",
  "maxItems": 50,
  "maxItemsPerQuery": 25,
  "sortBy": "date",
  "resolvePublisherUrl": true,
  "addSnippets": true,
  "onlyNew": false,
  "monitorId": "default"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `decodedLinks` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "artificial intelligence regulation",
        "\"supply chain\" semiconductors"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hiver/google-news-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": [
        "artificial intelligence regulation",
        "\"supply chain\" semiconductors",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("hiver/google-news-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "artificial intelligence regulation",
    "\\"supply chain\\" semiconductors"
  ]
}' |
apify call hiver/google-news-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hiver/google-news-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hr559VbGFiw5D9KoC/builds/fYWPMrEORoEh2exTl/openapi.json
