# Instagram Highlights Scraper - Stories & Media (`khadinakbar/instagram-highlights-scraper`) Actor

Scrape Instagram story highlights from any public profile or highlight ID. Returns every story item with image or video URL, timestamp, caption, duration and music, plus highlight titles and covers. No login or cookies needed.

- **URL**: https://apify.com/khadinakbar/instagram-highlights-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, Automation, MCP servers
- **Features:** Limited permissions
- **Stats:** 825 total users, 461 monthly users, 85.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 highlight story items

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

### What is Instagram Stories & Highlights Scraper?

Scrape Instagram story highlights, and optionally the live 24-hour stories, from any public profile or from highlight IDs. Every story item comes back as one row with image and video CDN URLs, timestamps, captions, video length and music, plus the highlight title, cover and owner. It needs no Instagram login, cookies, browser or proxy. Profiles and highlights are fetched in parallel, so a 100-profile job finishes in minutes, not an hour.

**Why people use it:** archive a brand's highlights before they change, study how competitors use stories, build creative libraries, audit paid-partnership labels, or feed an AI agent clean story data.

#### What's new

- Much faster on big jobs: provider calls run in parallel while rows are still saved and billed one at a time, so caps and counts stay exact.
- Memory now scales with job size (256, 512 or 1024 MB) instead of a flat 512 MB.
- The slower backup route for live stories is now opt-in (`allowCostlyFallback`). If the main live-stories route is down, that profile is skipped, shown as `route_unavailable` and not charged.
- `OUTPUT` now has an `agentSummary` sentence that tells an AI agent what happened in plain words.
- Prices are unchanged.

### What It Extracts

By default (`includeStories: true`) one dataset row is one story item, with the highlight and owner metadata denormalized on every row — so spreadsheets, BI tools, and AI agents can filter and join without a second lookup.

| Field | Description |
| --- | --- |
| `recordType` | `story` (default mode), `highlight` (list-only mode) or `active_story` (current 24-hour story) |
| `highlightId` | Instagram highlight reel ID |
| `highlightTitle` | Display title of the highlight tray |
| `highlightUrl` | Canonical URL of the highlight |
| `position` | 1-based position of the item inside the highlight |
| `mediaId` | Instagram media ID of the story item |
| `shortcode` | Public shortcode of the item |
| `storyUrl` | Canonical Instagram story URL |
| `mediaType` | `video` or `image` |
| `imageUrl` / `thumbnailUrl` | Image CDN URLs (full and thumbnail) |
| `videoUrl` | Progressive MP4 CDN URL for video items |
| `videoDuration` | Video length in seconds |
| `hasAudio` | Whether the video carries audio |
| `width` / `height` | Original media dimensions in pixels |
| `caption` | Caption text, when present |
| `likeCount` / `commentCount` | Aggregated counts, when the provider exposes them |
| `isPaidPartnership` | Paid-partnership marker |
| `musicArtist` / `musicTitle` | Attached music sticker metadata, when present |
| `takenAt` | ISO 8601 timestamp of the original post |
| `expiresAt` | When an active story disappears (active_story rows only) |
| `mentions` | Usernames tagged with mention stickers |
| `links` | Link-sticker destination URLs (Instagram redirect removed) |
| `hashtags` / `locationName` | Hashtag and location stickers, when present |
| `stickers` | Interactive stickers when present: polls and quizzes (options and vote counts when Instagram shows them), question prompts, sliders (vote count and average), countdowns. Answers typed into a question sticker are visible only to the account owner, so they are never available |
| `ownerId` / `ownerUsername` / `ownerVerified` | Highlight owner identity |
| `coverImageUrl` | Highlight cover (highlight rows) |
| `provider` / `scrapedAt` / `sourceUrl` | Provenance fields |

### When To Use

This actor works well for:

- Archiving a brand's or competitor's permanent highlight content before it changes
- Competitive analysis of how accounts organize story marketing into highlights
- Collecting highlight media URLs for content libraries and creative research
- Auditing paid-partnership disclosures inside story highlights
- Feeding AI agents one clean highlight-item dataset from usernames or highlight IDs

Turn on `includeActiveStories` to also capture the 24-hour stories tray (set `includeHighlights: false` to get only current stories). For profile metadata, posts, reels, comments, hashtags, and follower lists, route to the matching Instagram actors in this portfolio (see Related Actors) — each is a focused standalone workflow for its own entity.

### Best Fit

Choose this actor when your starting point is a public profile handle (or a highlight link you already hold) and your deliverable is highlight content: tray titles, covers, and every story item with media URLs and timestamps. Start with `includeStories: false` to inventory trays cheaply, then feed the highlight IDs that matter into a second expanded run. Pair it with the [Instagram Profile Scraper](https://apify.com/khadinakbar/instagram-profile-scraper) when you also need follower counts and bio context for the same accounts.

### Input

```json
{
  "usernames": ["instagram"],
  "includeStories": true,
  "maxHighlightsPerUser": 20,
  "maxStoriesPerHighlight": 100,
  "maxTotalItems": 100
}
```

Current 24-hour stories only:

```json
{
  "usernames": ["instagram"],
  "includeActiveStories": true,
  "includeHighlights": false
}
```

You can also skip the profile listing entirely and pass direct highlight IDs or URLs:

```json
{
  "highlightIds": ["https://www.instagram.com/stories/highlights/18142207969557132/"]
}
```

#### Important Inputs

| Input | Default | Notes |
| --- | --- | --- |
| `usernames` | `["instagram"]` | Handles, @handles, or profile URLs |
| `highlightIds` | none | Highlight IDs or highlight URLs, with or without `usernames` |
| `includeStories` | `true` | Expand every story item; `false` saves one cheap row per highlight |
| `includeActiveStories` | `false` | Also save the current 24-hour stories of each username |
| `includeHighlights` | `true` | Turn off to skip highlights and get only active stories |
| `includeStatusRows` | `false` | Add one free `target_status` row per input to the dataset (found, not found, private, no highlights, not processed). Off by default so existing pipelines see no new rows |
| `maxActiveStoriesPerUser` | `100` | Active stories saved per username (1–200) |
| `maxHighlightsPerUser` | `20` | Highlights processed per username (1–200) |
| `maxStoriesPerHighlight` | `100` | Story items saved per highlight (1–1000) |
| `maxTotalItems` | `5000` | Run-wide row cap and spend guard |
| `providerOrder` | The default provider order | Provider routing; fallback is automatic |
| `allowCostlyFallback` | `false` | Live stories only: try the slower backup route when the main one does not answer. Off means that profile is skipped and not charged |
| `includeRawData` | `false` | Attach raw provider payloads for debugging |

### Output Example

Real row from the `instagram` account's "creatives" highlight:

```json
{
  "recordType": "story",
  "highlightId": "18142207969557132",
  "highlightTitle": "creatives",
  "highlightUrl": "https://www.instagram.com/stories/highlights/18142207969557132/",
  "position": 1,
  "mediaId": "3811480328699137079",
  "shortcode": "DTlGSo0gEw3",
  "storyUrl": "https://www.instagram.com/stories/instagram/3811480328699137079/",
  "mediaType": "video",
  "imageUrl": "https://scontent-bos5-1.cdninstagram.com/v/t51.71878-15/616341681_1403647328019524_609409640201682429_n.jpg",
  "videoUrl": "https://scontent-bos5-1.cdninstagram.com/o1/v/t2/f2/m78/AQOd_6Ko6XVGRcbkl_piTFNNSHU2UxFWfFIjpdnK15GwiAeoa4EGsWVl869bbZ1oRLu0AwmWSNL0jEU8pK-CN8N13ZChU-BfJgFSRi4.mp4",
  "videoDuration": 24.333,
  "hasAudio": true,
  "width": 1080,
  "height": 1920,
  "takenAt": "2026-01-16T17:17:56.000Z",
  "ownerId": "25025320",
  "ownerUsername": "instagram",
  "ownerVerified": true,
  "scrapedAt": "2026-08-17T00:00:00.000Z",
  "sourceUrl": "https://www.instagram.com/instagram/"
}
```

### Pricing

This actor uses Pay per event (PPE) pricing with Apify platform usage included.

| Event | Price |
| --- | ---: |
| Actor start | `$0.00005` |
| Highlight story item saved (`includeStories: true`) | `$0.003` on Free and Bronze, `$0.0028` Silver, `$0.0025` Gold, Platinum and Diamond |
| Highlight row saved (`includeStories: false`) | `$0.002` |
| Active 24-hour story saved (`includeActiveStories: true`) | Same price as a story item for your plan |
| Status rows (`includeStatusRows: true`) | Free, never charged |

The Pricing tab is always the source of truth. If it lists an `active-story-lookup` event, each profile checked for live stories bills that small lookup fee once, on top of the rows saved.

With `includeStories: false`, direct highlight IDs also return one highlight record rather than expanded stories. Only one result event applies to any given row: expanded runs charge per story item and never additionally per highlight; list-only runs charge per highlight row. See the Pricing tab on this actor's page for the live price table. Apify platform usage is included in the event price, and the run's opening status message shows the approximate maximum event cost from your input caps before work starts.

#### What a run costs

| Job | Rows (about) | Cost on the Free/Bronze price |
| --- | ---: | ---: |
| 1 profile, 5 highlights, 10 stories each | 50 | about $0.15 |
| 20 profiles, 20 highlights, 15 stories each | 6,000 | about $18 |
| 1 profile, list only (`includeStories: false`) | 20 | about $0.04 |

Set `maxTotalItems` to cap the bill: the run stops as soon as it is reached.

### FAQ

**Do I need to log in to Instagram?** No. It reads public data only.

**Why did a profile return nothing?** The profile may be private, renamed, deleted, or simply have no highlights. Check `targets` in `OUTPUT` (or turn on `includeStatusRows`). None of these are charged.

**Are live 24-hour stories supported?** Yes, with `includeActiveStories`. They exist for 24 hours only, so run again to catch new ones.

**Why did the live-stories status say `route_unavailable`?** The live-stories route did not answer. Nothing was charged. Try again later, or set `allowCostlyFallback` to use the backup route.

**Can I get who viewed a story or private answers?** No. Viewer lists and question-sticker answers are visible only to the account owner.

**How fast is it?** Provider calls run several at a time. Rows are still saved in order and billed one by one, so caps stay exact.

#### Free Apify plan

Runs started from a free Apify plan return up to 250 results per run, with every input mode and output field available. Paid Apify plans have no per-run limit, so your usual result settings apply.

### Reliability

The actor routes every request through managed public-data providers:

1. The primary data provider for the primary highlights and highlight-detail routes.
2. The fallback data provider as automatic fallback when the primary errors, rate-limits, or returns nothing usable.

Runs write matching `OUTPUT` and `RUN_SUMMARY` records with provider attempts, status codes, saved-row counts, credit usage, stop reason, and estimated event cost. A `TERMINAL_FENCE` with state `DONE` confirms that both records were read back. Recognized empty profiles remain distinguishable from provider outages; malformed responses and exhausted required routes fail when no useful data remains. Usernames or highlight IDs that Instagram reports as not found, deleted or private are not charged and do not stop the run: each one appears in the `targets` list of `OUTPUT` with status `not_found`, `private` or `no_highlights`, and a run where every input is like that ends successfully as `VALID_EMPTY`.

Unknown provider credit usage and unconfirmed delivery counts are reported as `null`. After an ambiguous save or a restart with an existing checkpoint, the Actor stops further paid work. Inspect the Dataset, charges and saved diagnostics before starting a new run. The checkpoint is a single-writer replay guard, not an atomic Dataset-and-charge transaction.

### Workflow story

A typical workflow: a social team tracks five competitor accounts. They first run the actor with `includeStories: false` across all five handles to inventory highlight trays cheaply, then re-run with `highlightIds` pinned to the two trays that matter and `maxStoriesPerHighlight` raised, feeding the media URLs into their creative asset library. Each run ends with a `RUN_SUMMARY` they can diff week over week to see which highlights were renamed, re-covered, or removed.

### API Example

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('khadinakbar/instagram-highlights-scraper').call({
  usernames: ['instagram'],
  includeStories: true,
  maxHighlightsPerUser: 10,
  maxStoriesPerHighlight: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### MCP And AI Agents

This actor is exposed through Apify MCP as `khadinakbar/instagram-highlights-scraper`. After each run, read `agentSummary` in `OUTPUT` for a one-sentence result. Agent prompt card:

> Scrape Instagram story highlights for one or more public profiles or highlight IDs. Use it when you need highlight titles, covers, or every story item with media URLs and timestamps; set `includeActiveStories` for current 24-hour stories; route to a sibling Instagram actor for posts, reels, comments, or profiles. Returns one row per story item (`recordType: "story"` or `"active_story"`) or per highlight in list-only mode, plus a `RUN_SUMMARY`; set `includeStatusRows` to also get one free `target_status` row per input with provider telemetry and cost. Costs $0.0025 to $0.003 per story item depending on your Apify plan, $0.002 per highlight row, plus a $0.00005 start.

### Best Results Guidance

- Provide exact handles without spaces; profile URLs also work as input.
- Start with `includeStories: false` when you only need to discover highlight trays, then pass selected `highlightIds` to an expanded run.
- Use the current limit names (`maxTotalItems`, `maxStoriesPerHighlight`, `maxHighlightsPerUser`). Legacy aliases, when present, add a limit; the smaller bound wins.
- Cap spend with `maxTotalItems`; the status message shows the cost ceiling before rows are billed.
- Treat a profile with zero highlights as a valid empty result: confirm with `RUN_SUMMARY.usersWithZeroHighlights` before retrying.
- Schedule list-only passes weekly and expanded runs on demand to keep archival costs predictable.

### Builder's Note

I built this actor because highlights are the most stable part of Instagram's story surface — they outlive the 24-hour tray — yet each provider returns them through a different envelope: one ships an array, the other an index-keyed object. I found the normalizer had to flatten both into the same row shape before the dataset stayed schema-stable across provider fallbacks. In my testing, public profiles with zero highlights returned a clean `VALID_EMPTY` outcome, which keeps batch jobs honest when a brand simply has no trays.

### Limits

- Public profiles and public highlights only; no private accounts or login-gated data.
- Active stories exist only for 24 hours. A profile with no current stories, or a private profile, returns no active rows and is not charged.
- A story that is both live now and already saved to a highlight appears once as `active_story` and once as `story`; each saved row is billed once.
- Usernames that do not exist, were renamed, or are private are reported in the `targets` list of `OUTPUT` and are never charged. Turn on `includeStatusRows` to also get them as `target_status` rows in the dataset.
- Sticker data depends on what Instagram exposes: most story items have no interactive sticker, and live 24-hour stories carry fewer sticker details than highlight stories.
- Story items are returned exactly as Instagram exposes them; some fields (likes, music) are absent on some items.
- Very large highlight collections are bounded by `maxHighlightsPerUser` and `maxStoriesPerHighlight`.
- `maxTotalItems` caps billed rows per run; use it as a spend guard for batches.
- Media URLs are Instagram CDN links with expiry; download promptly if you need the files.

### Related Actors

- [Instagram Posts Scraper](https://apify.com/khadinakbar/instagram-posts-scraper) for profile posts and hashtag feeds.
- [Instagram Profile Scraper](https://apify.com/khadinakbar/instagram-profile-scraper) for profile metadata.
- [Instagram Reels Scraper](https://apify.com/khadinakbar/instagram-reels-scraper) for reels feeds.
- [Instagram User Scraper](https://apify.com/khadinakbar/instagram-user-scraper) when you need to resolve and verify profile identity first.
- [Instagram Trending Reels Scraper](https://apify.com/khadinakbar/instagram-trending-reels-scraper) for discovering trending reels before choosing which profiles to track.

### Legal

Use this actor only for public Instagram content you are allowed to access and process. You are responsible for complying with Instagram's Terms of Service, privacy laws, data protection rules, and any platform or jurisdiction-specific requirements. This actor does not access private accounts or login-gated content.

# Changelog

This Actor's version history is a separate document: https://apify.com/khadinakbar/instagram-highlights-scraper/changelog.md

# Actor input Schema

## `usernames` (type: `array`):

Instagram usernames whose public story highlights should be scraped. Accepts plain handles (e.g. "instagram"), @handles (e.g. "@natgeo"), or full profile URLs (e.g. "https://www.instagram.com/instagram/"). Leave empty if you only pass highlightIds. NOT post, reel, or hashtag URLs.

## `highlightIds` (type: `array`):

Direct Instagram highlight IDs (e.g. "18142207969557132") or highlight URLs (e.g. "https://www.instagram.com/stories/highlights/18142207969557132/") whose story items should be scraped without listing a profile first. Combine with usernames or use alone. NOT a story, post, or profile URL.

## `includeActiveStories` (type: `boolean`):

When true, each username is also checked for stories posted in the last 24 hours, and one row per current story is saved with recordType "active_story" (media URLs, posted and expiry time, mentions, link stickers). Each saved story is billed like a story item. Usernames with no current stories, or private profiles, return no rows and no story charge. Once the Pricing tab lists an "active-story-lookup" event, each profile that is checked also bills that small lookup fee. Off by default.

## `includeStatusRows` (type: `boolean`):

When true, the dataset also gets one free row per username or highlight (recordType "target_status") saying what happened: ok, not_found, private, no_highlights, no_active_stories, failed or not_processed, with counts. These rows are never charged and are not counted in maxTotalItems. Off by default so existing pipelines see no new rows; the same information is always available in the run's OUTPUT record.

## `includeHighlights` (type: `boolean`):

When true (default), the saved highlights of each username are scraped. Turn off together with "Include active 24-hour stories" on to get only current stories. Direct highlight IDs are always scraped.

## `includeStories` (type: `boolean`):

When true (default), each highlight is opened and one row is saved per story item with media URLs, timestamps, captions, and video metadata. When false, only the highlight list is saved (one row per highlight: title, cover, owner) at a lower per-row price. Turning this off is useful for cheap highlight discovery before deep-diving selected highlights.

## `maxHighlightsPerUser` (type: `integer`):

Upper bound on how many highlights are processed per username, newest-tray order first. Accepts 1-200; defaults to 20. Raises the run cost ceiling because each highlight costs one provider call. NOT a cap on story items — use maxStoriesPerHighlight for that.

## `maxStoriesPerHighlight` (type: `integer`):

Upper bound on story items saved per expanded highlight. Accepts 1-1000; defaults to 100. Most highlights contain 5-50 items. NOT a global cap — use maxTotalItems for that.

## `maxActiveStoriesPerUser` (type: `integer`):

Upper bound on current 24-hour stories saved per username when active stories are on. Accepts 1-200; defaults to 100.

## `maxTotalItems` (type: `integer`):

Hard global cap on saved rows across all targets; the run stops gracefully when reached. Accepts 1-100000; defaults to 5000 (the prefilled 100 is a small first test). Use it as a spend guard together with the per-row price. NOT a per-target limit. Free Apify plan runs return up to 250 results per run.

## `includeRawData` (type: `boolean`):

When true, each row also carries the unmodified provider item under a "raw" key for debugging or field-level analysis. Defaults to false because raw payloads roughly triple row size. NOT needed for normal scraping — every normalized field is already extracted.

## `allowCostlyFallback` (type: `boolean`):

Only applies when active 24-hour stories are on. If the main live-stories route does not answer, the profile is skipped, marked route_unavailable in the status and not charged. Turn this on to try a backup route instead: it usually works but is slower and does not change what you are billed. Off by default. NOT needed for highlights.

## Actor input object example

```json
{
  "usernames": [
    "instagram",
    "@natgeo"
  ],
  "highlightIds": [
    "18142207969557132"
  ],
  "includeActiveStories": false,
  "includeStatusRows": false,
  "includeHighlights": true,
  "includeStories": true,
  "maxHighlightsPerUser": 10,
  "maxStoriesPerHighlight": 50,
  "maxActiveStoriesPerUser": 100,
  "maxTotalItems": 500,
  "includeRawData": false,
  "allowCostlyFallback": false
}
```

# Actor output Schema

## `storyItems` (type: `string`):

One row per highlight story item (default), per highlight (list-only mode), or per current 24-hour story (active stories mode), with media URLs, timestamps, captions, mentions, links, highlight context, and owner info.

## `runSummary` (type: `string`):

Run diagnostics, provider telemetry, counts, stop reason, and estimated PPE cost.

## `output` (type: `string`):

Same summary under the OUTPUT key for stable agent and readback evidence.

# 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 = {
    "usernames": [
        "instagram"
    ],
    "maxTotalItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/instagram-highlights-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 = {
    "usernames": ["instagram"],
    "maxTotalItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/instagram-highlights-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 '{
  "usernames": [
    "instagram"
  ],
  "maxTotalItems": 100
}' |
apify call khadinakbar/instagram-highlights-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/instagram-highlights-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/MgkaQUdK9F1m7ChzE/builds/CQS5OqVTguxDO7DMe/openapi.json
