# Newsletter Scraper (`maximedupre/newsletter-scraper`) Actor

Find newsletters by topic and read public Substack and LinkedIn newsletter details and issues. Get names, authors, article text, images, and public counts when available for newsletter research.

- **URL**: https://apify.com/maximedupre/newsletter-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Business, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 newsletter scrapeds

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

### 📰 Find newsletters and collect public issues

Newsletter researchers, content teams, and developers can use Newsletter Scraper to find newsletters by topic and read public Substack and LinkedIn newsletters. Get newsletter details or issue rows with text, authors, dates, images, and public counts when available. Use the dataset to compare publications, review articles, or build a research table without copying each page by hand.

- Build a topic research list with the **[newsletter finder](https://apify.com/maximedupre/newsletter-scraper/examples/newsletter-finder)**.
- Review public creator profiles and contact details with the **[newsletter author scraper](https://apify.com/maximedupre/newsletter-scraper/examples/newsletter-author-scraper)**.
- Collect public posts for a reading archive with the **[Substack archive scraper](https://apify.com/maximedupre/newsletter-scraper/examples/substack-archive-scraper)**.
- Save public issue text for content research with the **[LinkedIn article scraper](https://apify.com/maximedupre/newsletter-scraper/examples/linkedin-article-scraper)**.
- Compare stated newsletter subscription plans and public subscriber counts when available.

#### 📚 Newsletter details and readable issue content

Choose one of two result types for each run:

- **Newsletters** finds newsletters across publishing platforms by topic, or reads Substack and LinkedIn newsletter URLs. Rows can include names, descriptions, topics, images, links, pricing models, and sending frequency. Substack rows can also include public author profiles, contact emails, social links, subscriber statements, creation dates, and subscription offerings.
- **Issues** collects public Substack posts or LinkedIn newsletter editions. Rows include readable text and can include HTML, Markdown, authors, dates, images, and engagement counts. Substack rows can also include tags, language, access information, and previews.

Data varies by platform and page. Missing optional values may be absent or empty. Author follower counts and newsletter subscriber counts are separate fields. Subscriber statements keep words such as “over” rather than turning them into exact counts.

#### ▶️ Choose a topic or newsletter URL and run

1. Choose **Newsletters** or **Issues**.
2. For Newsletters, choose **Topic** and enter published topic names, or choose **Newsletter URLs** and add Substack or LinkedIn newsletter links.
3. For Issues, add newsletter URLs to collect archive posts or exposed editions, or add direct issue URLs.
4. Set **Maximum results** to a positive number to cap the total saved rows. Leave it blank or use `0` for all available results.
5. Start the run, then open the dataset in Apify Console to inspect or export the rows.

Substack custom domains are supported. LinkedIn newsletter collection covers only editions exposed on the public newsletter page. The Actor does not require a Substack or LinkedIn login or API key and does not include paid-only text.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Required. Choose `newsletters` for newsletter details or `issues` for public article content and issue details. The form prefills `newsletters`; there is no schema default. |
| `findNewslettersBy` | string | For `newsletters`, choose `topic` or `newsletterUrls`. Defaults to `topic` when omitted. Ignored for `issues`. |
| `topics` | array of strings | Required for Newsletters by Topic. Enter exact published topic names, such as `science` or `self improvement`, with one phrase per entry. Names are case-sensitive and can change. Free-form keywords, aliases, and spelling corrections are not supported. The form prefills `science`; there is no schema default. Other choices ignore this field. |
| `urls` | array of objects or strings | Required for Newsletters by Newsletter URLs and for Issues. Enter complete `https://` URLs. The form uses objects with a `url` field; plain URL strings are also accepted. Topic lookup ignores this field. No default or prefill. |
| `urls[].url` | string | A Substack publication URL, including a custom domain, or a LinkedIn newsletter URL. For Issues, a direct Substack post or LinkedIn `/pulse/` issue URL is also accepted. |
| `publishedAfter` | string | Optional UTC date in `YYYY-MM-DD` form. For Substack Issues, keep posts published strictly after midnight at the start of this date. Applies to archives and direct posts. Blank means all dates. Does not filter LinkedIn editions and is ignored for Newsletters. No default. |
| `maxItems` | integer | Optional total row limit across all submitted values, for either result type. Use a whole number of `0` or more. Omitted or `0` means all available results. The form prefills `10`; this is not a schema default. No schema upper bound. A run may return fewer rows than requested. |

Only fields for the chosen result type and discovery choice are used. Each run uses one result type. A list of topics or a list of supported URLs can be processed in one run.

**Successful default input**

This is the public input from a successful run of the current beta build.

```json
{
  "maxItems": 10,
  "resultType": "newsletters",
  "findNewslettersBy": "topic",
  "topics": [
    "science"
  ]
}
```

#### 🧾 Output

**Output fields**

Each saved row is one newsletter or one issue. Optional fields depend on what the public page provides. The two row shapes use the tables below.

**Newsletter rows**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Always `newsletter`. |
| `url` | string | Public newsletter URL. |
| `title` | string | Newsletter name. |
| `platform` | string | Stated publishing platform, when known. |
| `description` | string | Newsletter description. |
| `topics` | array of strings | Published topics and categories. |
| `imageUrl` | string | Cover or logo image URL. |
| `websiteUrl` | string | Newsletter website URL. |
| `signupUrl` | string | Public signup page URL. |
| `pricingModel` | string | Stated free or paid pricing model. An unknown model can be absent. |
| `frequency` | string | Stated sending or publication frequency. |
| `subscriberCount` | string | Public subscriber statement, including qualifiers such as “over.” |
| `createdAt` | string | Publication creation date stated by the platform. |
| `authors` | array of objects | Public newsletter authors or creators. |
| `authors[].name` | string | Author name. |
| `authors[].url` | string | Author profile URL. |
| `authors[].id` | string | Platform author ID. |
| `authors[].biography` | string | Public author biography. |
| `authors[].imageUrl` | string | Author image URL. |
| `authors[].followerCount` | number | Public author follower count. |
| `authors[].emails` | array of strings | Public author contact email addresses, when available. |
| `authors[].socialLinks` | array of strings | Public author social profile URLs. |
| `authors[].accountAttributes` | array of objects | Account attributes stated by Substack. |
| `authors[].accountAttributes[].name` | string | Attribute name. |
| `authors[].accountAttributes[].value` | string | Stated attribute value, including values such as `false`. |
| `subscriptionOfferings` | array of objects | Stated subscription offerings. These describe the newsletter, not Actor charges. |
| `subscriptionOfferings[].name` | string | Offering name. |
| `subscriptionOfferings[].price` | string | Stated price, currency, and billing period. Prices can be expressed in minor currency units. |
| `subscriptionOfferings[].description` | string | Stated offering details and benefits. |

**Genuine newsletter row**

This complete row came from a successful current-beta run. Its subscription prices and subscriber count are saved page values, not current offers or Actor prices.

```json
{
  "resultType": "newsletter",
  "platform": "Substack",
  "url": "https://www.lennysnewsletter.com",
  "title": "Lenny's Newsletter",
  "description": "Deeply researched product, growth, and career advice for product leaders, founders, and ambitious builders.\n",
  "createdAt": "2019-06-01T15:35:37.885Z",
  "imageUrl": "https://substackcdn.com/image/fetch/$s_!8MSN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F441213db-4824-4e48-9d28-a3a18952cbfc_592x592.png",
  "authors": [
    {
      "id": "1849774",
      "name": "Lenny Rachitsky",
      "url": "https://substack.com/@lenny",
      "biography": "Writing • Angel investing • Advising",
      "imageUrl": "https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/afba5161-65bb-4d99-8d6b-cce660917fa1_1540x1540.png",
      "followerCount": 1386994,
      "emails": [],
      "socialLinks": [
        "https://x.com/lennysan",
        "https://tiktok.com/@lennyrachtsky",
        "https://www.youtube.com/c/LennysPodcast"
      ],
      "accountAttributes": [
        {
          "name": "profile_disabled",
          "value": "false"
        }
      ]
    },
    {
      "id": "3667529",
      "name": "Kiyani",
      "url": "https://substack.com/@kiyani",
      "biography": "Student of products. I write to learn, share and meet kindred spirits ✨. ",
      "imageUrl": "https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/48e9d3e5-91eb-41be-9701-420b01f6585f_313x321.jpeg",
      "followerCount": 2060,
      "emails": [],
      "socialLinks": [
        "https://x.com/KiyaniBba"
      ],
      "accountAttributes": [
        {
          "name": "profile_disabled",
          "value": "false"
        }
      ]
    }
  ],
  "subscriptionOfferings": [
    {
      "name": "Free",
      "description": "Occasional free newsletter posts on product, growth, and career"
    },
    {
      "name": "Monthly",
      "price": "USD 2000 minor units / 1 month",
      "description": "Full archive: 500+ newsletter posts, podcast transcripts & key takeaways\nPrivate Slack with 30K+ PMs, founders & leaders + local meetups, AMAs & mentorship\nProduct Pass access: Free 20+ premium AI and product tools ($30,000+ in value)"
    },
    {
      "name": "Annual",
      "price": "USD 20000 minor units / 1 year",
      "description": "Full archive: 500+ newsletter posts, podcast transcripts & key takeaways\nPrivate Slack with 30K+ PMs, founders & leaders + local meetups, AMAs & mentorship\nProduct Pass access: Free 20+ premium AI and product tools ($30,000+ in value)"
    },
    {
      "name": "Insider Tier",
      "price": "USD 40000 minor units / 1 year",
      "description": "Full archive: 500+ newsletter posts, podcast transcripts & key takeaways\nPrivate Slack with 30K+ PMs, founders & leaders + local meetups, AMAs & mentorship\nProduct Pass access: Free 20+ premium AI and product tools ($30,000+ in value)\nEverything in Annual, plus priority access to every new Product Pass tool + Insider-only exclusives"
    }
  ],
  "pricingModel": "Paid subscriptions available",
  "subscriberCount": "Over 1,200,000 subscribers",
  "websiteUrl": "https://www.lennysnewsletter.com",
  "signupUrl": "https://www.lennysnewsletter.com/subscribe"
}
```

**Issue rows**

Substack and LinkedIn issues share this row shape. Substack includes all three content formats. The schema requires readable text for every issue; other values are present when available.

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Always `issue`. |
| `platform` | string | `Substack` or `LinkedIn`. |
| `url` | string | Public issue URL. |
| `title` | string | Issue title. |
| `newsletterUrl` | string | Parent newsletter URL, when stated. |
| `subtitle` | string | Issue subtitle. |
| `publishedAt` | string | Stated publication date and time. |
| `modifiedAt` | string | Stated modification date and time. |
| `excerpt` | string | Stated excerpt or content preview. |
| `topics` | array of strings | Stated Substack post tags and categories. |
| `language` | string | Stated Substack post language. |
| `access` | string | Stated Substack paid-access information, such as `everyone`. |
| `authors` | array of objects | Public issue authors. Substack uses the issue's byline authors, which can differ from newsletter contributors. |
| `authors[].name` | string | Author name. |
| `authors[].url` | string | Author profile URL. |
| `authors[].id` | string | Platform author ID. |
| `authors[].biography` | string | Public author biography. |
| `authors[].imageUrl` | string | Author image URL. |
| `authors[].followerCount` | number | Public author follower count. |
| `authors[].emails` | array of strings | Public author contact email addresses, when available. |
| `authors[].socialLinks` | array of strings | Public author social profile URLs. |
| `authors[].accountAttributes` | array of objects | Account attributes stated by Substack. |
| `authors[].accountAttributes[].name` | string | Attribute name. |
| `authors[].accountAttributes[].value` | string | Stated attribute value. |
| `content` | object | Publicly readable issue content. Formats can differ in links, images, and layout. |
| `content.text` | string | Readable issue text. |
| `content.html` | string | Public issue content in HTML. |
| `content.markdown` | string | Public issue content in Markdown. |
| `images` | array of objects | Public issue images. URLs link to image files; the Actor does not store image copies. |
| `images[].url` | string | Direct image URL. |
| `images[].altText` | string | Stated alternative text. |
| `images[].caption` | string | Stated caption. |
| `images[].width` | number | Image width in pixels. |
| `images[].height` | number | Image height in pixels. |
| `engagement` | object | Public engagement totals stated by the platform. |
| `engagement.likes` | number | Stated Substack like total. |
| `engagement.reactions` | number | Stated reaction total. |
| `engagement.comments` | number | Stated comment total. |

**Genuine issue row, shortened**

This row came from a successful current-beta run. The large `content` object is replaced by `"..."` to keep the example short. In the dataset, it holds the public article body in text, HTML, and Markdown for this row.

```json
{
  "resultType": "issue",
  "platform": "LinkedIn",
  "newsletterUrl": "https://www.linkedin.com/newsletters/ask-richard-6792750480419241984",
  "url": "https://www.linkedin.com/pulse/whats-one-belief-you-had-unlearn-order-keep-growing-richard-branson-9gdzc",
  "title": "What's one belief you had to unlearn in order to keep growing?",
  "publishedAt": "2026-08-07T15:52:56.000+00:00",
  "modifiedAt": "2026-08-07T15:53:25.000+00:00",
  "excerpt": "What a fantastic question. Thank you for asking it, Jean.",
  "authors": [
    {
      "name": "Richard Branson",
      "url": "https://www.linkedin.com/in/rbranson",
      "imageUrl": "https://media.licdn.com/dms/image/v2/C4D03AQHh6_Wth5f3rQ/profile-displayphoto-shrink_400_400/profile-displayphoto-shrink_400_400/0/1625181963183?e=2147483647&v=beta&t=zA3HEaoUjuU4RhgSNCrqX5NlSldv_di7CeIK7-iyjqI",
      "followerCount": 18646717
    }
  ],
  "content": "...",
  "images": [
    {
      "url": "https://media.licdn.com/dms/image/v2/D5612AQG5DV-WqDJl8A/article-cover_image-shrink_720_1280/B56Z_c6JyTHcAQ-/0/1786117661308?e=2147483647&v=beta&t=VkzhNom3yM8LrKiZMK3MCkkDB_oiRRXUBF0RTaBeu1E",
      "altText": "What's one belief you had to unlearn in order to keep growing?",
      "caption": "",
      "width": 1280,
      "height": 720
    },
    {
      "url": "https://media.licdn.com/dms/image/v2/D5612AQE-4M3KRKhUDg/article-inline_image-shrink_1000_1488/B56Z_c6_U6KEAI-/0/1786117879472?e=2147483647&v=beta&t=_Mq_1iA0sXIzR79yVOTm8G6IGrk28WCjpH8csJkVz1k",
      "altText": "Article content",
      "caption": "Me, and the team at Student",
      "width": 800,
      "height": 512
    }
  ],
  "engagement": {
    "reactions": 3870,
    "comments": 999
  }
}
```

#### 💳 Pricing

The Actor uses pay-per-event pricing. **Newsletter scraped** charges once for each saved newsletter. **Newsletter issue** charges once for each saved public issue. Both events have the same price for each Apify tier:

| Apify tier | Price per newsletter or issue |
| --- | --- |
| Free | $0.0002 |
| Bronze | $0.00015 |
| Silver | $0.00015 |
| Gold | $0.0001 |
| Platinum | $0.00005 |
| Diamond | $0.00005 |

There is no separate Actor event for setup, failed lookups, or empty searches. Only successfully saved rows incur these event charges. Repeated result URLs are saved and charged once per run. Check the Store pricing and your run charge limit before starting.

#### 🔌 Integrations

Read and export the dataset in Apify Console, or fetch rows through the Apify API. Use Apify schedules for repeat runs and webhooks to notify your own workflow when a run finishes.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Why did my topic return no newsletters?

Topic lookup needs an exact published name. It does not accept general search phrases or fix spelling. For example, use `science`, not a misspelling or a longer search phrase. Topic names can change. A run can also return fewer rows when pages are unavailable.

##### Does LinkedIn collection include every past edition?

No. A newsletter URL collects only the edition links exposed on its public newsletter page. You can also submit a direct public LinkedIn issue URL. The Substack date filter does not apply to LinkedIn editions.

##### Can I collect paid-only content or private subscriber lists?

No. The Actor collects public newsletter data and readable issue content. It does not include text behind paid access restrictions, private subscriber identities, or private analytics. Public subscriber statements and author follower counts may be available.

##### Does the date filter include the chosen day?

For Substack Issues, `publishedAfter` uses a strict timestamp comparison with midnight UTC at the start of the chosen date. A post later that day qualifies; a post exactly at that midnight does not. It applies to direct posts and archives.

##### What happens when the same newsletter or issue appears twice?

The Actor saves the first eligible row for a result URL and skips later rows with that same URL in the run. It does not combine fields from those later matches. The limit counts saved rows across all submitted values.

##### What if one lookup fails?

The Actor can keep valid rows while other lookups fail. Missing optional data stays absent or empty. A technical failure that prevents all requested data from being read can fail the run. A successful run with no matching data can have an empty dataset.

##### Can I collect Beehiiv or Ghost article archives?

This Actor can discover newsletter details across platforms by topic. URL-based newsletter and issue collection supports Substack and LinkedIn. Use a separate platform Actor for Beehiiv or other article archives.

##### Is this an open-source newsletter scraper I run on my computer?

This page describes the hosted Apify Actor. Run it in Apify Console or call it through the Apify API. It does not promise a separate open-source package or local setup.

### 📝 Changelog

**v0.0** (29-10-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~newsletter-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Substack API Scraper: Posts, Authors & Newsletters](https://apify.com/maximedupre/substack-api) collects public Substack posts, publication details, and comments for deeper Substack research.
- [Beehiiv Newsletter Scraper](https://apify.com/maximedupre/beehiiv) collects public Beehiiv newsletter profiles, posts, and content.
- [Buttondown Newsletter Scraper](https://apify.com/maximedupre/buttondown) reads public Buttondown newsletter profiles and archive posts.
- [Substack Recommendations](https://apify.com/maximedupre/substack-recommendations) maps public recommendation links between newsletters.
- [RSS Feed Reader](https://apify.com/maximedupre/rss-feed-reader) collects titles, dates, authors, and content from known public newsletter or blog feeds.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Stop after this many output rows across all submitted values. Leave blank or use 0 for all available results. This applies to both Newsletters and Issues.

## `resultType` (type: `string`):

Newsletters returns newsletter details, with public Substack author details where available. Issues returns public article content and issue details.

## `findNewslettersBy` (type: `string`):

Topic finds newsletters across publishing platforms. Newsletter URLs reads the Substack or LinkedIn newsletters in URLs below. Used only for Newsletters.

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

Enter published topic names, such as science or self improvement. The set of topic names can change. Use exact names, not free-form keywords or other names for a topic. Each entry is one topic phrase. Required when finding Newsletters by Topic; ignored for other choices.

## `publishedAfter` (type: `string`):

For Issues from Substack, keep only posts published after this date. Leave blank for all dates. This does not filter LinkedIn editions. Dates use UTC.

## `urls` (type: `array`):

Enter complete https:// URLs. For Newsletters by Newsletter URLs, use Substack publication URLs (including custom domains) or LinkedIn newsletter URLs. For Issues, use those newsletter URLs to collect archive posts or exposed editions, or enter direct Substack post or LinkedIn issue URLs. Required for these choices; ignored for Topic. For LinkedIn newsletter URLs, collection is limited to editions exposed on the public newsletter page. Paid-only text is not included.

## Actor input object example

```json
{
  "maxItems": 10,
  "resultType": "newsletters",
  "findNewslettersBy": "topic",
  "topics": [
    "science"
  ]
}
```

# Actor output Schema

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

Open the collected newsletter or issue rows.

# 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 = {
    "maxItems": 10,
    "resultType": "newsletters",
    "topics": [
        "science"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/newsletter-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 = {
    "maxItems": 10,
    "resultType": "newsletters",
    "topics": ["science"],
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/newsletter-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 '{
  "maxItems": 10,
  "resultType": "newsletters",
  "topics": [
    "science"
  ]
}' |
apify call maximedupre/newsletter-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/newsletter-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/3699vaY4xvxpSzNDB/builds/Sd9yhAnhbFW2DcMuZ/openapi.json
