EnsembleData is a social media data API built around unit quotas that reset every day. If your jobs run evenly through the month, that model works well. If they arrive in bursts, or if you need search and e-commerce data next to social data, the comparison looks different.
How we compared
ScrapingBot is our product. EnsembleData facts come from its pricing page, its API docs (including unit costs per endpoint), its TikTok API page and its official Python and Node SDKs, checked in October 2026.
The short version
Pick ScrapingBot if
Pick EnsembleData if
ScrapingBot vs EnsembleData at a glance
| ScrapingBot | EnsembleData | |
|---|---|---|
| Billing model | Monthly credits, usable any day of the cycle | Monthly plan with a daily unit allowance, reset at 00:00 UTC |
| Entry paid plan | Starter: $49.99, 275,000 credits | Wood: $100, 1,500 units a day (about 45,000 a month) |
| TikTok call cost | 1 credit on every endpoint | 1 unit (profile, videos using a sound, comments, replies, keyword search) or 2 (post info, sound details, followers, user search); user posts cost 1 + depth |
| Per 1,000 TikTok calls, entry plan | $0.18 | $2.22 for 1-unit calls, $4.44 for 2-unit calls, if the full daily allowance is used |
| Larger plans | Startup $99.99 (1.1M credits) to Business+ $999.99 (15.5M) | Bronze $200 (5,000/day) to Platinum $1,400 (50,000/day); Diamond custom |
| Free tier | 100 credits once, no card | Trial with 50 units a day; the TikTok page says 7 days, no card |
| Failed calls | Refunded; invalid parameters never charged | Not charged when caused by internal errors |
| Platforms | TikTok, Instagram, Google, Amazon US, any website | TikTok, Instagram, YouTube, Threads, Reddit, Twitch, Twitter, Snapchat |
| TikTok endpoints | 11 | 20 |
| Rate limits | 10 concurrent on Starter, up to 200 | "We do not enforce rate limits" |
| Auth | x-api-key header | token query parameter |
| SDKs | None | Official Python and Node |
| MCP server | Hosted, 23 tools | Not on its own site; offered through an Apify actor |
How the per-1,000 numbers work: Wood gives 1,500 units × 30 days = 45,000 units for $100, so a unit costs $0.00222. That holds only if you spend the whole allowance every day. ScrapingBot: $49.99 ÷ 275,000 credits = $0.00018 per credit.
Daily units vs monthly credits
The pricing model matters more than the headline price. Picture a team that refreshes 2,000 creator profiles every Monday and backfills 30,000 sound videos when a client signs on.
- On a daily quota, Monday's 2,000 calls exceed Wood's 1,500 units, so part of the refresh waits until Tuesday, and the units from the quiet days in between are lost. The 30,000-video backfill (about 3,000 sound pages) takes two days on Wood, or one day on Bronze at $200.
- On a monthly pool, both jobs run when you start them, limited only by concurrency (10 parallel requests on Starter). The month's total, 2,000 × 4 + 3,000 = 11,000 calls, is 11,000 credits, well inside Starter's 275,000.
The reverse case: a pipeline that runs 40,000 one-unit calls every single day. That is 1.2 million calls a month, which fits Platinum ($1,400) at about $0.93 per 1,000, or ScrapingBot Pro ($249.99, 3.3M credits) at about $0.08 per 1,000 TikTok calls. Run your own numbers with the unit table in EnsembleData's docs.
Coverage
Both cover the core TikTok jobs: profiles, a user's posts, sounds and the videos that use them, comments, replies, followers, following and keyword search. EnsembleData has more TikTok endpoints (20 against 11), including hashtag posts and full-search variants, and its followers endpoints take id plus secUid. ScrapingBot's followers and following endpoints return one page of up to 50 accounts.
EnsembleData also covers YouTube, Threads, Reddit, Twitch, Twitter and Snapchat. ScrapingBot doesn't. In exchange, ScrapingBot's credits also buy Google results (web, news, shopping, places, maps and reviews), Amazon product data and rendered web pages.
Migrating from EnsembleData
EnsembleData takes a GET with the token in the query string. ScrapingBot takes a POST with the key in a header and the endpoint in the body. The videos that use a sound, before and after:
# Before: EnsembleData
import requests
res = requests.get(
"https://ensembledata.com/apis/tt/music/posts",
params={"music_id": "7682907287056337667", "cursor": 0, "token": ENSEMBLE_TOKEN},
timeout=60,
)
data = res.json()["data"]
items, next_cursor = data["aweme_list"], data["nextCursor"]
# After: ScrapingBot
import requests
res = requests.post(
"https://scrapingbot.io/api/v1/tiktok",
headers={"x-api-key": SCRAPINGBOT_KEY},
json={"endpoint": "/music/posts", "params": {"music_id": "7682907287056337667"}},
timeout=60,
)
data = res.json()["data"]
items, next_cursor, more = data["videos"], data["cursor"], data["hasMore"]
# keep paging with params["cursor"] = next_cursor until more is 0
Each ScrapingBot video is a flat object with video_id, title, play_count, digg_count, comment_count, create_time and author, so map your fields once. A profile from /user/info returns data.user and data.stats, the same top-level split as EnsembleData's tt/user/info.
| EnsembleData | ScrapingBot endpoint | Main parameter |
|---|---|---|
tt/user/info | /user/info | unique_id |
tt/user/posts | /user/posts | unique_id, cursor |
tt/music/details | /music/info | music_id |
tt/music/posts | /music/posts | music_id, cursor |
tt/post/comments | /comment/list | video url, cursor |
tt/post/comments-replies | /comment/reply | comment_id, video_id |
tt/user/followers, tt/user/followings | /user/followers, /user/following | numeric user_id, count up to 50 |
tt/keyword/search, tt/user/search | /feed/search, /user/search | keywords |
One difference to plan for: EnsembleData's comment endpoints take an aweme_id, while ScrapingBot's /comment/list takes the video URL. The comments export guide shows the full loop, including replies.
Common questions
How does EnsembleData pricing work?
EnsembleData sells monthly plans with a daily allowance of units that resets at 00:00 UTC: Wood is $100 a month for 1,500 units a day, Bronze $200 for 5,000, Silver $400 for 11,000, Gold $800 for 25,000 and Platinum $1,400 for 50,000. Each endpoint costs a set number of units. Checked October 2026.
Is ScrapingBot cheaper than EnsembleData for TikTok?
At the entry level, yes. If you use Wood's full allowance every day, a one-unit EnsembleData call costs about $2.22 per 1,000 and a two-unit call $4.44. ScrapingBot Starter ($49.99 for 275,000 credits) costs $0.18 per 1,000 TikTok calls whatever the endpoint. On Platinum, EnsembleData comes down to about $0.93 per 1,000 one-unit calls.
What happens to unused units?
EnsembleData units reset every day at 00:00 UTC, so a quiet day's allowance is gone the next day. ScrapingBot credits are a monthly pool you can use on any day of the cycle; unused credits don't carry into the next month.
Does EnsembleData have an MCP server?
Its own site doesn't document one; an MCP endpoint is offered through an EnsembleData actor on Apify. ScrapingBot hosts its own MCP server at scrapingbot.io/api/mcp with 23 tools.
Which platforms does each one cover?
EnsembleData covers TikTok, Instagram, YouTube, Threads, Reddit, Twitch, Twitter and Snapchat. ScrapingBot covers TikTok and Instagram, plus Google search, Amazon (US) and general website scraping.
Are failed requests charged?
EnsembleData says no units are charged for failed requests caused by internal errors; its docs show a lookup of a username that doesn't exist still costs a unit. ScrapingBot refunds failed calls and doesn't charge requests with missing or invalid parameters.