# instagram-reels-to-sheets (`one1studio/instagram-reels-to-sheets`) Actor

- **URL**: https://apify.com/one1studio/instagram-reels-to-sheets.md
- **Developed by:** [One1 Studio](https://apify.com/one1studio) (community)
- **Categories:** Social media, Automation, Integrations
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Reels → Google Sheets

Automatically scrape Instagram Reels from any public account, transcribe the audio with OpenAI Whisper, calculate virality scores, and push everything to Google Sheets — on autopilot.

**No Instagram cookies. No proxies. No API keys to manage. Just enter usernames and run.**

***

### ✨ What It Does

1. **Scrapes Reels** from any public Instagram accounts you specify
2. **Extracts engagement data** — likes, comments, follower count, captions, hashtags
3. **Transcribes audio** using OpenAI Whisper (optional)
4. **Calculates virality scores** based on engagement rate + volume
5. **Sends everything to Google Sheets** via a webhook

All fully automated. Schedule it daily or weekly and your spreadsheet stays up to date.

***

### 🚀 Features

- ⚡ **Zero config scraping** — uses Apify's built-in Instagram actor, no cookies or logins needed
- 🎙️ **Audio transcription** — get the spoken script of every reel via OpenAI Whisper
- 📈 **Virality scoring** — automated scoring system ranks reels as Low / Medium / High / Viral
- 📊 **Google Sheets integration** — data lands directly in your spreadsheet
- 🔄 **Schedulable** — set it and forget it with Apify's built-in scheduler
- 📦 **Clean dataset output** — browse results directly in Apify with formatted table views

***

### 💰 Cost

| Component | Cost |
|---|---|
| Instagram scraping (12 accounts × 20 reels) | ~$0.31 per run |
| Whisper transcription | ~$0.006/min of audio |
| Google Sheets webhook | Free |
| **Total per weekly run** | **~$1-2/month** |

> Requires Apify **Starter plan** or higher to run the built-in Instagram scraping actor.

***

### 📥 Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `handles` | string\[] | No | 10 sample accounts | Instagram usernames to scrape (without @) |
| `daysBack` | integer | No | 7 | Only collect reels posted within this many days |
| `reelsPerAccount` | integer | No | 20 | Max reels to fetch per account. Lower = cheaper |
| `openaiApiKey` | string | No | — | OpenAI API key for Whisper transcription. Leave empty to skip |
| `webhookUrl` | string | **Yes** | — | Google Apps Script web app URL for Sheets integration |

#### Example Input

```json
{
    "handles": ["hormozi", "garyvee", "hubaborhidi"],
    "daysBack": 7,
    "reelsPerAccount": 20,
    "openaiApiKey": "sk-...",
    "webhookUrl": "https://script.google.com/macros/s/your-id/exec"
}
```

***

### 📤 Output

Each reel produces a row with the following fields:

| Field | Type | Example |
|---|---|---|
| `collected_at` | datetime | `2026-03-09T00:08:38.661Z` |
| `handle` | string | `hormozi` |
| `follower_count` | integer | `3200000` |
| `post_url` | string | `https://www.instagram.com/reel/ABC123/` |
| `posted_at` | datetime | `2026-03-07T14:22:00.000Z` |
| `likes` | integer | `45200` |
| `comments` | integer | `1830` |
| `total_engagements` | integer | `47030` |
| `engagement_rate_pct` | number | `1.47` |
| `caption` | string | `The #1 skill every entrepreneur needs...` |
| `hashtags` | string | `#entrepreneur #business` |
| `transcript` | string | `Here's what nobody tells you about starting a business...` |
| `virality_score` | number | `105.6` |
| `virality_tier` | string | `High` |

#### Dataset Views

The actor provides two pre-built views in the Apify Console:

- **Overview** — Handle, likes, comments, engagement rate, virality score and tier
- **Content & Transcripts** — Handle, caption, hashtags, full transcript, tier

#### Virality Scoring

| Tier | Score Range | What It Means |
|---|---|---|
| 🟢 Viral | 150+ | Exceptional engagement, way above average |
| 🔵 High | 80–149 | Strong performance, above average |
| 🟡 Medium | 40–79 | Solid engagement, typical for the niche |
| 🔴 Low | 0–39 | Below average engagement |

The score is calculated as:

```
Virality = (Engagement Rate × 40) + (log10(Total Engagements) × 10)
```

This balances **relative performance** (engagement rate vs followers) with **absolute reach** (total engagement volume).

***

### 🔧 Setup Guide

#### Step 1: Create Your Google Sheets Webhook

1. Create a new Google Sheet with these column headers in Row 1:

```
Collected At | Handle | Followers | Reel URL | Posted At | Likes | Comments | Total Engagements | Engagement Rate % | Caption | Hashtags | Transcript | Virality Score | Virality Tier
```

2. Go to **Extensions → Apps Script** and paste this code:

```javascript
function doPost(e) {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var data = JSON.parse(e.postData.contents);
    var rows = data.rows || [];
    for (var i = 0; i < rows.length; i++) {
        sheet.appendRow(rows[i]);
    }
    return ContentService.createTextOutput(
        JSON.stringify({ status: "ok", rows: rows.length })
    ).setMimeType(ContentService.MimeType.JSON);
}
```

3. Click **Deploy → New Deployment → Web App**
4. Set **Execute as**: Me, **Who has access**: Anyone
5. Copy the web app URL — that's your `webhookUrl`

#### Step 2: Get an OpenAI API Key (Optional)

1. Go to [platform.openai.com/api-keys](https://platform.openai.com/api-keys)
2. Create a new key
3. Paste it into the `openaiApiKey` input field

Skip this step if you don't need audio transcription.

#### Step 3: Run the Actor

1. Enter your Instagram handles (without @)
2. Paste your webhook URL
3. Optionally paste your OpenAI API key
4. Click **Start**

That's it! Your Google Sheet will populate automatically.

***

### 📅 Scheduling

To run this automatically every day or week:

1. Go to your actor's page on Apify
2. Click **Schedules** → **Create Schedule**
3. Set the frequency (e.g., every Monday at 9am)
4. Save — your spreadsheet will update itself

***

### 🔍 How It Works

```
Your Actor
    │
    ├─ Phase 1: Scraping
    │     │
    │     └─→ Calls apify/instagram-reel-scraper
    │           (handles all proxies, sessions, rate limits)
    │           └─→ Returns reels data (likes, comments, captions, video URLs)
    │
    ├─ Phase 2: Transcription (if OpenAI key provided)
    │     │
    │     └─→ Downloads each reel video
    │           └─→ Sends to OpenAI Whisper API
    │                 └─→ Returns text transcript
    │
    └─ Phase 3: Score + Send
          │
          ├─→ Calculates virality score for each reel
          ├─→ Sends rows to Google Sheets via webhook
          └─→ Saves results to Apify dataset
```

***

### ❓ Troubleshooting

| Problem | Solution |
|---|---|
| **"Your Apify plan doesn't support running public actors"** | Upgrade to the Apify Starter plan ($49/mo). The Creator and Free plans can't call other actors. |
| **"Not enough Apify credits"** | Add credits to your Apify account. Each run costs ~$0.31. |
| **No reels found** | Check that the handles are correct and the accounts are public. Try increasing `daysBack`. |
| **Whisper errors** | Verify your OpenAI API key is valid and has credits. Videos over 25MB are automatically skipped. |
| **Webhook errors** | Make sure your Google Apps Script is deployed as a web app with "Anyone" access. Redeploy if needed. |
| **Missing transcripts** | Some reels may not have a video URL available. The transcript field will be empty for those. |
| **Follower count is 0** | The Instagram actor may not return follower data for all accounts. Engagement rate will show as 0 for those. |

***

### 📁 Output Files

| Location | What's There |
|---|---|
| **Dataset** | Every reel as a structured JSON row — browsable in Apify Console with Overview and Content views |
| **Key-Value Store → RUN\_SUMMARY** | Quick stats: accounts scraped, total reels, transcribed count, rows sent, run time |
| **Google Sheets** | Same data in your spreadsheet, ready for charts and analysis |

***

### 🧑‍💻 API Usage

You can trigger this actor programmatically:

```javascript
const Apify = require('apify');

const run = await Apify.call('your-username/instagram-reels-to-sheets', {
    handles: ['hormozi', 'garyvee'],
    daysBack: 7,
    reelsPerAccount: 20,
    openaiApiKey: 'sk-...',
    webhookUrl: 'https://script.google.com/macros/s/your-id/exec',
});

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

Or via REST API:

```bash
curl -X POST "https://api.apify.com/v2/acts/your-username~instagram-reels-to-sheets/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "handles": ["hormozi", "garyvee"],
    "webhookUrl": "https://script.google.com/macros/s/your-id/exec"
  }'
```

***

### 📝 Changelog

- **v1.0.0** — Initial release
  - Instagram Reels scraping via Apify actor
  - OpenAI Whisper transcription
  - Virality scoring (Low / Medium / High / Viral)
  - Google Sheets webhook integration
  - Apify dataset output with Overview and Content views
  - Run summary in key-value store

***

### 📄 License

MIT

***

### 🙋 Support

- 🐛 **Bug?** Open an issue on the actor's GitHub page
- 💬 **Questions?** Ask on [Apify Discord](https://discord.com/invite/jyEM2PRvMU)
- 📧 **Contact:** Reach out through Apify's messaging system

# Actor input Schema

## `handles` (type: `array`):

List of Instagram usernames to scrape (without @).

## `daysBack` (type: `integer`):

Only collect reels posted within this many days.

## `reelsPerAccount` (type: `integer`):

Max number of reels to fetch per account. Lower = cheaper.

## `openaiApiKey` (type: `string`):

For Whisper transcription. Leave empty to skip.

## `webhookUrl` (type: `string`):

Your Google Apps Script web app URL.

## Actor input object example

```json
{
  "handles": [
    "one1.studi0",
    "maxferrerl",
    "hormozi"
  ],
  "daysBack": 7,
  "reelsPerAccount": 20
}
```

# 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 = {
    "handles": [
        "one1.studi0",
        "maxferrerl",
        "hormozi"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("one1studio/instagram-reels-to-sheets").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 = { "handles": [
        "one1.studi0",
        "maxferrerl",
        "hormozi",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("one1studio/instagram-reels-to-sheets").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "handles": [
    "one1.studi0",
    "maxferrerl",
    "hormozi"
  ]
}' |
apify call one1studio/instagram-reels-to-sheets --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=one1studio/instagram-reels-to-sheets",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/d1K0bWsEoLThQ1UJx/builds/9WpgFfMgKN5WcXZcg/openapi.json
