n8n social media scraping workflow: 3 templates and costs
Build an n8n social media scraping workflow: Instagram counts to Sheets, TikTok alerts in Slack and a YouTube AI Agent, for about $4.50 of credits a month.
By Scrape Everything team · · 10 min read
TL;DR: An n8n social media scraping workflow is a scheduled n8n automation that fetches public profile and post data from Instagram, TikTok or YouTube and writes it to a Google Sheet, a Slack channel or an AI agent. You build it from a Schedule Trigger, one scraping node and one output node.
The scraping node here is the Scrape Everything n8n community node: one node and one API key for nine platforms, 31 of its 40 operations cost 1 credit, and you never log in to a platform. Below are three workflows to copy, with their monthly cost.
What is the Scrape Everything n8n node?
n8n-nodes-scrapeeverything is an n8n community node that calls the Scrape Everything API, a REST API for public social media data returned as clean JSON. You pick a Resource (the platform) and an Operation (the action), fill in a username or URL, and get JSON back.
It covers Instagram, TikTok, X, YouTube, Facebook, Telegram, Spotify, Pinterest and Twitch, and it's flagged usableAsTool, so n8n AI Agent nodes can call it. The HTTP Request node can do the same job, but the node shows only the fields each operation needs, so nobody hand-types a JSON body.
Which scraping option should I plug into n8n?
Prices are from each vendor's pricing page, checked 2026-10-22, and may change.
| Option | Billing model | Entry price (list price; credits, usage and records differ between vendors) | Free tier | How results arrive |
|---|---|---|---|---|
| Scrape Everything node | One-time credit packs, credits never expire | $39 for 25,000 credits ($1.56 per 1,000) | 100 free credits | Synchronous JSON per call |
| HTTP Request node + any API | The vendor's | n/a | n/a | Depends on the API |
| Apify | Monthly plan with prepaid usage, plus per-Actor pricing | Starter $19 per month | $5 of usage per month | Run an Actor job, then read its dataset |
| Bright Data | Per record, or monthly plans | $1.50 per 1,000 records | 5,000 records per month | See their docs |
| ScrapeCreators | Credit packs, credits never expire | $47 for 25,000 credits | 100 free credits | They list an n8n integration; see their docs |
Product names are trademarks of their owners; we are not affiliated with them. Figures from each vendor's public pricing page, verified October 22, 2026. Spot an error? Email [email protected] and we correct it.
My take: for LinkedIn, Reddit, Threads or non-social sites, Apify or ScrapeCreators cover ground we don't. For monitoring our nine platforms, a synchronous node is simpler, with no "start job, wait, fetch dataset" loop.
How do I install the n8n community node?
- In n8n, open Settings > Community Nodes and click Install.
- Enter
n8n-nodes-scrapeeverythingand confirm. - Search for "Scrape Everything" in the nodes panel. If it shows up, you're done.
It needs n8n 1.x or later. The n8n guide to installing community nodes covers manual npm installs.
Does it work on n8n Cloud?
Not as a node yet. n8n Cloud only offers verified community nodes, and this one isn't verified yet. On Cloud, use the HTTP Request node: POST https://api.scrapeeverything.com/v1/instagram/profile, a Header Auth credential with Authorization: Bearer ssk_live_..., and a JSON body like {"username": "nasa"}.
How do I add my API key as a credential?
- Sign up with Google or GitHub. New accounts get 100 free credits, no payment details needed.
- Copy your API key from the dashboard. It starts with
ssk_live_. - In n8n, create a Scrape Everything API credential and paste the key.
On save, n8n tests the key against GET /v1/account, which never spends credits.
The node's Instagram Photos request, as cURL:
curl -X POST https://api.scrapeeverything.com/v1/instagram/photos \
-H "Authorization: Bearer $SCRAPEEVERYTHING_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username": "example_user", "limit": 3}'Trimmed response (placeholder values, real field names):
{
"success": true,
"data": {
"username": "example_user",
"is_private": false,
"follower_count": 48213,
"post_count": 586,
"posts_source": "feed",
"posts": [
{
"shortcode": "C0dExAmPlE1",
"link": "https://www.instagram.com/p/C0dExAmPlE1/",
"type": "photo",
"like_count": 1204,
"comment_count": 37,
"taken_at": 1792483200
}
]
},
"meta": { "request_id": "req_example123", "cached": false, "credits_charged": 2, "credits_remaining": 98 }
}The n8n node outputs only data by default, so you write {{ $json.follower_count }}, not {{ $json.data.follower_count }}. Turn on Include Response Metadata to get meta too.
Which endpoints does an n8n social media scraping workflow need?
Five operations cover most monitoring. Numbers come from the API catalog; the full list is on the scrapers page.
| Operation | Credits | Main input | What you get | Max items |
|---|---|---|---|---|
| Instagram Profile | 1 | username | Bio, follower/following/post counts, flags | n/a |
| Instagram Photos | 2 | username, limit | Profile plus recent posts with likes and comments | 60 posts |
| TikTok Posts | 1 | username, limit | Profile summary plus newest videos with play counts | 12 videos |
| YouTube Videos | 1 | username or channel | Channel summary plus latest uploads | 30 videos |
| YouTube Transcript | 1 | url or id, lang | Timed segments and plain text | n/a |
Two quirks. Instagram like_count is null when the owner hid likes or the posts_source didn't carry counts. YouTube publish times are relative ("12 days ago"), so store your own timestamp. X works the same way: Posts returns up to 60 recent tweets for 2 credits.
How do I save daily Instagram follower counts to Google Sheets with n8n?
This is the n8n Instagram scraper workflow most people want first: one row per account per day.
- Schedule Trigger: daily at 07:00.
- Edit Fields (Set) named "Accounts": one item per handle, such as
[{ "username": "nasa" }, { "username": "natgeo" }]. - Scrape Everything: Resource
Instagram, OperationPhotos, Username{{ $json.username }}, Additional Fields > Limit3, Options > Cache Days1. In Settings, turn on Retry On Fail. - Google Sheets, Operation
Append Row:date:{{ $now.toISODate() }}($nowis a Luxon DateTime)username:{{ $json.username }}followers:{{ $json.follower_count }}engagement:{{ $json.posts[0] && $json.follower_count ? ((($json.posts[0].like_count ?? 0) + ($json.posts[0].comment_count ?? 0)) / $json.follower_count).toFixed(4) : '' }}
- Run it once by hand, check the sheet, activate.
Four nodes. The engagement column (newest post's likes plus comments, over followers) is crude, but clients ask for it first.
Private accounts won't break it: Profile and Photos return is_private: true and an empty posts array, so filter on is_private if you want them out. (Post and Reels return 404 PRIVATE_ACCOUNT instead.)
Only need follower counts? Operation Profile costs 1 credit instead of 2, and ships as the example Instagram-to-Google-Sheets workflow. Import it (Workflows > Import from File), pick your credentials, and swap its manual trigger for a Schedule Trigger.
How do I get a Slack alert when a competitor posts on TikTok?
This uses the n8n TikTok node operation Posts, and works the same for Instagram or YouTube.
- Schedule Trigger: every 6 hours.
- Edit Fields (Set) "Competitors": one item per TikTok handle.
- Scrape Everything: Resource
TikTok, OperationPosts, Username{{ $json.username }}, Limit5. - Split Out: Field To Split Out
posts, IncludeSelected Other Fields, Fields To Includeusername. - Remove Duplicates: Operation "Remove Items Processed in Previous Executions", Value to Dedupe On
{{ $json.id }}. This turns "latest 5 videos" into "videos we haven't seen" (see the Remove Duplicates node docs). - Slack: post
New TikTok from @{{ $json.username }}: {{ $json.link }}.
The trap is the first run: every video is "new", so five accounts send 25 Slack messages at once. Deactivate the Slack node, run once to seed the history, then reactivate it.
Keep TikTok IDs as strings. They're 19 digits, past JavaScript's Number.MAX_SAFE_INTEGER (9,007,199,254,740,991). The API returns them as strings; cast one to a number and the rounded ID never matches again.
How do I build an n8n AI Agent that summarizes YouTube videos?
Because the node is usableAsTool, you can attach it to the LangChain-based n8n AI Agent node. This n8n AI agent tool setup for social media handles questions like "What has @example_channel covered in its last few uploads?"
- Add a Chat Trigger and an AI Agent with any chat model sub-node.
- Add a Scrape Everything tool: Resource
YouTube, OperationVideos, Username defined by the model, Limit5. - Add a second tool: Resource
YouTube, OperationTranscript, URL defined by the model, Langen. - Describe each tool plainly, such as "Get the transcript of one YouTube video by URL". Vague descriptions get vague tool choices.
- System message: "List the channel's latest videos, fetch transcripts for at most 3, then summarize each in 3 bullets."
That run costs 4 credits. Watch the other bill: transcripts are long, and the model's tokens can cost more than the credits. For the same tools in Claude or Cursor, the Scrape Everything MCP server exposes every endpoint as a Model Context Protocol tool.
Test the n8n YouTube transcript call outside n8n first:
import os
import requests
resp = requests.post(
"https://api.scrapeeverything.com/v1/youtube/transcript",
headers={"Authorization": f"Bearer {os.environ['SCRAPEEVERYTHING_API_KEY']}"},
json={"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "lang": "en", "cache_days": 14},
timeout=90, # most calls take 1-5 s; blocked ones are retried and can take up to a minute
)
body = resp.json()
if not body["success"]:
raise SystemExit(f"{resp.status_code} {body['code']}: {body['message']}")
data = body["data"]
print(data["language_name"], data["segment_count"], "segments")
print(data["text"][:300])data holds text, timed segments and available_languages. No captions in your language returns 404 NO_TRANSCRIPT, with the available codes in the message. More in our YouTube transcript API guide.
Can I scrape comments and hashtags in n8n?
Comments, yes: Instagram (up to 15 per post), TikTok (up to 100 per video) and YouTube comments cost 1 credit per call. Hashtags, partly: TikTok Hashtag returns stats only, not the videos. For hashtag discovery at scale, Apify is the better fit.
How do I keep credit use low?
Caching does most of the work. With Cache Days set (0 to 14), the API returns a stored result for the same endpoint and target if it's no older than that, and a cache hit costs 0 credits. nasa, @nasa and the profile URL share one cache entry; a different limit doesn't. The caching docs suggest 1 for daily reports and 7 to 14 for enrichment.
My rule: Cache Days 1 on every snapshot workflow, so a re-run after a crash gets already-fetched accounts free. Beyond that, use the slowest schedule that works.
Cost per 30 days, no cache hits, at the Builder rate of $1.56 per 1,000 credits:
| Workflow | Setup | Credits per day | Credits per 30 days | Dollars (Builder) |
|---|---|---|---|---|
| 1. Snapshot (Profile) | 10 Instagram accounts, daily | 10 | 300 | $0.47 |
| 1. Snapshot (Photos) | 10 Instagram accounts, daily | 20 | 600 | $0.94 |
| 2. Competitor alerts | 5 TikTok accounts, every 6 hours | 20 | 600 | $0.94 |
| 3. AI Agent | 1 list + 3 transcripts, 5 runs a day | 20 | 600 | $0.94 plus LLM tokens |
All three, with the Photos snapshot, use about 1,800 credits a month: about $2.81 on Builder, so one $39 pack of 25,000 lasts nearly 14 months.
Per post, limit decides it. Photos with limit 60 works out to about 67 credits (roughly $0.10 on Builder) per 1,000 posts; with limit 3, about 667 credits ($1.04).
Credits never expire. See the pricing page, the pricing calculator, or the agency use case page if you run this for clients.
Which errors cost credits and which are refunded?
Errors come back as { success: false, message, code, request_id }. Branch on code, not the message text.
| Status | Code | Charged? | What to do in n8n |
|---|---|---|---|
| 401 | INVALID_API_KEY | No | Re-paste the key |
| 402 | INSUFFICIENT_CREDITS | No | Top up |
| 404 | NOT_FOUND, PRIVATE_ACCOUNT, NO_TRANSCRIPT | Yes | Don't retry; it's a final answer |
| 429 | RATE_LIMITED, CONCURRENCY_LIMIT | No | Retry On Fail, or Loop Over Items |
| 502 | TARGET_BLOCKED | No, refunded | Retry On Fail with a few seconds' wait |
| 504 | TIMEOUT | No, refunded | Same as 502 |
Free accounts get 60 requests per minute and 5 concurrent; paid accounts get 300 and 20 (see rate limits). For 200 handles, put Loop Over Items in front with a batch size of 5. All codes are in the error code reference.
Retrying a NOT_FOUND just pays twice; fix the list instead. For the profile endpoint in plain code, see our Instagram profile scraping guide.
FAQ
Do I need an Instagram or TikTok login, or the official APIs?
No. The node fetches public data only: no platform login, no Instagram Graph API app review, no TikTok developer account. It can't see private accounts either.
Can n8n scrape social media for free?
You can start free. The 100 free credits cover 10 days of Workflow 1 on 10 accounts in Profile mode, or just under 2 days of all three workflows (60 credits a day).
Why doesn't the node show up as a tool for my AI Agent?
On self-hosted n8n, set the environment variable N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true and restart. The node is already flagged usableAsTool.
How many credits does a daily n8n social media scraping workflow use?
Accounts times operation cost: ten Instagram profiles a day is 300 credits a month ($0.47 on Builder). Cache hits are free, 429s aren't charged, and failed requests are refunded automatically.
Can I do this with the HTTP Request node instead?
Yes, and on n8n Cloud that's the route today: POST /v1/<platform>/<action> with a JSON body and a Bearer header. The OpenAPI spec at https://scrapeeverything.com/openapi.json lists every path and parameter.
Is scraping public social media data legal?
It depends on your jurisdiction and use, and we won't give a legal conclusion. Read each platform's terms (TikTok's and Instagram's included), follow GDPR and CCPA, and don't profile private individuals. Our post on whether scraping public social media data is legal covers the main questions.
Get 100 free credits, paste the key into an n8n credential, import instagram-profile-to-sheet.json and switch it to a 07:00 Schedule Trigger. Your first row lands tomorrow morning.