# Instagram Stories & Highlights Scraper - Download & Monitor (`zaver.api/instagram-stories-highlights-scraper`) Actor

Scrape Instagram stories and highlights from any public account - no login. Get every story and highlight with direct photo and video download URLs, plus mentions, hashtags, links and location. Monitor accounts on a schedule and only get new items. Export to CSV, JSON or Excel.

- **URL**: https://apify.com/zaver.api/instagram-stories-highlights-scraper.md
- **Developed by:** [Zaver](https://apify.com/zaver.api) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.20 / 1,000 story/highlight medias

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Instagram Stories & Highlights Scraper 📸

**Instagram Stories & Highlights Scraper** downloads the **active stories** and all **saved highlights** of any public **Instagram** account — **no login, no cookies, no password**. Get every story and highlight media item with **direct photo and video download URLs**, plus mentions, hashtags, swipe-up links and location. Run it on a **schedule to monitor accounts** and get only new stories before they expire. Export to **CSV, Excel or JSON**, or pull it straight from the **API**.

Perfect for **social media monitoring, competitor tracking, influencer research and content archiving**.

- ✅ **No login / no cookies** — your Instagram account is never touched or put at risk
- ✅ **Stories *and* highlights** for any public profile
- ✅ **Direct download URLs** for every photo and video — save the media itself
- ✅ **Monitoring mode** — schedule it and pay only for *new* stories
- ✅ Captures **mentions, hashtags, links & location** stickers
- ✅ **CSV, Excel, JSON, XML** export + full API, scheduler and integrations

***

### What does the Instagram Stories & Highlights Scraper do?

Give it one or more Instagram usernames or profile URLs and it returns one clean row per media item — every currently-active story and every clip inside every saved highlight album — each with a direct, downloadable image or video URL. Schedule it with **monitoring mode** on and it becomes a story watcher that captures new stories automatically, 24/7, before they disappear.

### What data does it extract?

One row per story / highlight media item:

| Field | Description | Example |
|---|---|---|
| `source_username` | Profile the media belongs to | `nasa` |
| `item_type` | `story` or `highlight` | `highlight` |
| `highlight_title` | Highlight album name (highlights only) | `Mars` |
| `media_type` | `photo` or `video` | `video` |
| `image_url` | **Direct image download URL** | `https://…jpg` |
| `video_url` | **Direct video download URL** (videos) | `https://…mp4` |
| `video_duration` | Length in seconds | `12.5` |
| `taken_at` | When it was posted (Unix) | `1724980000` |
| `expiring_at` | When a story expires (stories only) | `1725066400` |
| `mentions` | @mentioned accounts | `["spacex"]` |
| `hashtags` | Hashtags on the story | `["mars"]` |
| `link_urls` | Swipe-up / link-sticker URLs | `["https://nasa.gov"]` |
| `location` | Tagged location name | `Kennedy Space Center` |

### How to download Instagram stories & highlights (step by step)

1. Enter one or more **usernames or profile URLs** (`nasa` or `https://www.instagram.com/nasa/`).
2. Choose **Stories + Highlights**, **Stories only**, or **Highlights only**.
3. *(Optional)* Cap **max highlight albums per profile**.
4. *(Optional)* Turn on **monitoring mode** to get only new media on scheduled runs.
5. Click **Start**, then download from the **Storage → Dataset** tab as **CSV, Excel, JSON or XML** — or read it via the API. Each row's `image_url` / `video_url` links straight to the media file.

#### Example input

```json
{
  "targets": ["nasa", "natgeo"],
  "scrapeType": "both",
  "maxHighlights": 20
}
```

#### Example output

```json
{
  "source_username": "nasa",
  "item_type": "highlight",
  "highlight_title": "Mars",
  "media_type": "video",
  "image_url": "https://cdn.instagram.com/…thumb.jpg",
  "video_url": "https://cdn.instagram.com/…clip.mp4",
  "video_duration": 12.5,
  "taken_at": 1724980000,
  "mentions": ["spacex"],
  "hashtags": ["mars"],
  "location": "Kennedy Space Center"
}
```

#### Monitor accounts for new stories (scheduling)

Turn on `onlyNew` and set an Apify **schedule** (for example every hour). Each run returns only stories that have appeared since the last run — so you capture stories before the 24-hour expiry, and you are billed only for the new ones.

```json
{
  "targets": ["nasa", "natgeo", "spacex"],
  "scrapeType": "stories",
  "onlyNew": true
}
```

#### Run it via the Apify API

```bash
curl "https://api.apify.com/v2/acts/YOUR~ACTOR/runs?token=YOUR_TOKEN" \
  -X POST -H "Content-Type: application/json" \
  -d '{"targets": ["nasa"], "scrapeType": "both"}'
```

Works with the **Apify SDK** (JavaScript & Python), **scheduled runs**, **webhooks**, and integrations for **Make, Zapier, n8n, Google Sheets, Slack and LangChain**.

### Pricing — pay only for results

You are billed **per media item delivered** to your dataset. Failed lookups, private-profile errors, and already-seen items in monitoring mode cost **nothing**.

| Result type | Price |
|---|---|
| Story or highlight media item | **$0.0085 per item** ($8.50 / 1,000) |

That is deliberately set **below the category average** — comparable Instagram story/highlight Actors on the Apify Store average roughly **$0.0096–0.0107 per result**, so this Actor comes in about **10% cheaper** while returning direct download URLs and monitoring for free.

### What can I use this for?

- **Social media monitoring** — watch competitors' and partners' stories on a schedule and archive them automatically.
- **Competitor & campaign tracking** — see what brands post in stories and highlights, including swipe-up links and promoted products.
- **Influencer research & vetting** — review a creator's highlights to judge content quality and brand fit before a campaign.
- **Content archiving & backup** — save your own or clients' stories and highlights, with the original media files, before they expire.
- **Trend & hashtag research** — collect story hashtags, mentions and locations across many accounts.

### Frequently asked questions

#### Do I need to log in to download Instagram stories?

No. This scraper uses its own managed data infrastructure — **no login, no cookies, no password**. Your account is never used, so it is never at risk, and viewing is **anonymous** (the account owner is not notified).

#### Can it download stories anonymously?

Yes. Nothing is done from your account, so the target never sees you in their story viewers.

#### Can it scrape a private account's stories or highlights?

No. Stories and highlights of private accounts are not publicly accessible. Private targets return a clear error row and are **not billed**.

#### How do I get new stories automatically before they expire?

Turn on **monitoring mode** (`onlyNew`) and set an Apify schedule (e.g. hourly). Each run returns only newly-appeared stories, so you capture them within the 24-hour window and pay only for the new ones.

#### Does it give me the actual photo and video files?

Yes. Every row includes a direct `image_url` and, for videos, a `video_url` that links straight to the media file for download.

#### What export formats are supported?

**CSV, Excel (XLSX), JSON, JSONL and XML**, plus direct API access and integrations with Make, Zapier, n8n and Google Sheets.

#### Is scraping Instagram stories legal?

This scraper collects only **publicly available** data. You are responsible for using it in compliance with the laws that apply to you (including **GDPR** and **CCPA**) and Instagram's terms, and for respecting the rights of content creators. Do not republish media without permission.

### Support & roadmap

Found a bug or want a feature? Open an issue on the Actor's **Issues** tab. On the roadmap: **story-viewer lists**, **poll/quiz sticker results**, and **direct media file archiving** to key-value storage.

# Actor input Schema

## `targets` (type: `array`):

Usernames or profile URLs of the accounts whose stories and highlights you want. One per line, e.g. <code>nasa</code> or <code>https://www.instagram.com/nasa/</code>. Private accounts cannot be scraped.

## `scrapeType` (type: `string`):

Stories = current active stories (expire in 24h). Highlights = all saved highlight albums and their media. Both = everything.

## `maxHighlights` (type: `integer`):

How many highlight albums (trays) to open per profile. Each album is fetched separately; lower this to cap cost on accounts with dozens of highlights. Ignored when scraping stories only.

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

For scheduled monitoring: skip any story or highlight item this Actor already returned in a previous run, and deliver only newly-appeared media. Already-seen items are not billed. Turn this on when you schedule the Actor to watch accounts for new stories.

## Actor input object example

```json
{
  "targets": [
    "nasa"
  ],
  "scrapeType": "both",
  "maxHighlights": 100,
  "onlyNew": false
}
```

# Actor output Schema

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

Every story and highlight media item produced by this run, one dataset item each, with direct download URLs.

## `resultsCsv` (type: `string`):

The same records as a CSV download, ready for Excel or Sheets.

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

Counts for the run: requests, media items, errors, and per-profile / per-type breakdown.

# 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 = {
    "targets": [
        "nasa"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaver.api/instagram-stories-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 = { "targets": ["nasa"] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zaver.api/instagram-stories-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/mmsVe3IhljF36qhot/builds/5nlM5lIHSyOGniVQ3/openapi.json
