Introduction
The ScrapingIsNotACrime API lets you retrieve public data from Instagram, TikTok, YouTube, and the Apple App Store via simple HTTP requests — X (Twitter) is coming soon. Every endpoint returns clean, typed JSON.
https://api.scrapingisnotacrime.com/v1Authentication
All requests must include your API key in the X-API-Key header. Get your key from the dashboard — no extra setup needed.
curl "https://api.scrapingisnotacrime.com/v1/instagram/profile/cristiano" \ -H "X-API-Key: sinac_your_api_key"
Credits
Every successful API response consumes exactly 1 credit. Failed requests (4xx / 5xx) are never charged. Credits never expire.
Credit usage is returned in every response:
{ "success": true, "data": "{ ... }", "credits_used": 1, "credits_remaining": 4823 }
Errors
The API uses standard HTTP status codes. Error responses always include a machine-readable error code and a human-readable hint.
{ "success": false, "error": "user_not_found", "hint": "No public profile found for username 'xyz123'. Check spelling.", "credits_used": 0 }
| Status | Error code | Meaning |
|---|---|---|
| 200 | — | Success |
| 400 | invalid_params | Missing or malformed parameter |
| 401 | invalid_key | API key missing or not recognized |
| 402 | insufficient_credits | Account has 0 credits remaining |
| 404 | user_not_found | Profile or content not found on the platform |
| 429 | rate_limited | Too many concurrent requests from this key |
| 500 | internal_error | Our fault — retrying usually works |
| 502 | platform_unavailable | Source platform temporarily unreachable |
Access public Instagram profiles, contact blocks, timelines, posts, reels, and media download links. All endpoints target publicly visible content only.
/instagram/profile/{username}Returns public profile metadata for any Instagram username — follower count, following, post count, bio, verification status, and business information.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
username | string | path | Instagram username without @ |
curl "https://api.scrapingisnotacrime.com/v1/instagram/profile/natgeo" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "username": "natgeo", "full_name": "National Geographic", "bio": "See the world through the eyes of National Geographic photographers.", "followers": 283400000, "following": 172, "posts": 28941, "verified": true, "profile_pic_url": "https://...", "external_url": "https://www.nationalgeographic.com", "is_business": true, "business_category": "Media/news company" }, "credits_used": 1, "credits_remaining": 4822 }
/instagram/profile/{username}/contactReturns the public contact block of a profile — the structured business email, phone, and address Instagram exposes, plus any email addresses and phone numbers written into the bio itself. Built from the same payload as the profile endpoint, so it costs no extra round trip to Instagram. A profile with no contact information returns 200 with the fields set to null.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
username | string | path | Instagram username without @ |
curl "https://api.scrapingisnotacrime.com/v1/instagram/profile/cafedaesquina/contact" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "username": "cafedaesquina", "full_name": "Café da Esquina", "biography": "☕ Pedidos: [email protected] | wa.me/5511999990000", "is_verified": false, "is_business": true, "category": "Coffee shop", "email": null, "phone": null, "external_url": "https://cafe.com.br", "address": { "street_address": "Rua X, 123", "zip_code": "01310-100", "city_name": "São Paulo", "region_name": "SP", "country_code": "BR" }, "emails_found": [ { "value": "[email protected]", "source": "biography" } ], "phones_found": [ { "value": "+5511999990000", "source": "whatsapp_link" } ] }, "credits_used": 1 }
/instagram/profile/{username}/timeline/latestReturns up to 12 of the most recent public posts from a profile, with media URLs, captions, likes, comment counts, and timestamps.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
username | string | path | Instagram username without @ |
curl "https://api.scrapingisnotacrime.com/v1/instagram/profile/natgeo/timeline/latest" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "posts": [ { "id": "3671234567890", "shortcode": "C8xQz1aP9Kv", "type": "image", "caption": "A lone wolf traverses the Yellowstone...", "likes": 482000, "comments": 3241, "media_url": "https://...", "timestamp": "2026-06-14T18:22:00Z" } ] }, "credits_used": 1 }
/instagram/profile/{username}/timelineWalks a profile's full post history page by page. Pass the previous response's next_cursor back as cursor to advance; has_more tells you when there is nothing left. Use this instead of /timeline/latest whenever you need more than the first page.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
username | string | path | Instagram username without @ |
count | integer | query·opt | Posts per page, 1–50. Default 12. This is a request, not a guarantee — Instagram may return fewer. |
cursor | string | query·opt | Cursor from the previous response's next_cursor. Omit it to fetch the first page. |
curl "https://api.scrapingisnotacrime.com/v1/instagram/profile/nasa/timeline?count=12&cursor=3950671748375397992_528817151" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "medias": [ { "id": "3957840214710558089", "shortcode": "DbtErSrlB2J", "type": "image", "caption": "A beautiful sunset 🌅", "likes": 12500, "comments": 150, "preview_comments": [], "location": null, "display_url": "https://...", "taken_at_timestamp": "2026-08-05 18:30:00 UTC" } ], "has_more": true, "next_cursor": "3943186559128294411_528817151" }, "credits_used": 1 }
/instagram/profile/{username}/media/{mediaId}Returns full details for a specific media item identified by its numeric ID, scoped to the profile. Includes media type, caption, engagement metrics, and media URLs.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
username | string | path | Instagram username without @ |
mediaId | string | path | Numeric media ID (e.g. 3671234567890) |
curl "https://api.scrapingisnotacrime.com/v1/instagram/profile/natgeo/media/3671234567890" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "id": "3671234567890", "shortcode": "C8xQz1aP9Kv", "type": "image", "caption": "A lone wolf traverses the Yellowstone...", "likes": 482000, "comments": 3241, "media_url": "https://...", "thumbnail_url": "https://...", "timestamp": "2026-06-14T18:22:00Z", "owner": { "username": "natgeo" } }, "credits_used": 1 }
/instagram/media/{shortcode}Fetches a media item directly by its shortcode — the alphanumeric code found in Instagram post URLs. Supports single images, videos, and carousel/sidecar posts.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
shortcode | string | path | Post shortcode (e.g. C8xQz1aP9Kv from instagram.com/p/C8xQz1aP9Kv/) |
/instagram/media/{shortcode}/downloadReturns a flat list of every downloadable asset behind a post, reel, or carousel — video files, images, and thumbnails — each with its resolution and expiry. The list is ordered so that assets[0] is always the best primary asset; on a carousel, every asset carries the index of the child it belongs to. The response holds Meta CDN links, not the bytes: fetch them directly from the CDN before expires_at. An existing post with no downloadable asset returns an empty assets array, not a 404.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
shortcode | string | path | Post, reel, or carousel shortcode (e.g. DbtErSrlB2J) |
curl "https://api.scrapingisnotacrime.com/v1/instagram/media/DbtErSrlB2J/download" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "shortcode": "DbtErSrlB2J", "type": "video", "expires_at": "2026-08-08 07:51:36 UTC", "assets": [ { "kind": "video", "index": 0, "url": "https://instagram.fxxx.fbcdn.net/o1/v/t2/f2/m86/video.mp4", "width": 720, "height": 1280, "quality": "101", "expires_at": "2026-08-08 07:51:36 UTC" }, { "kind": "thumbnail", "index": 0, "url": "https://instagram.fxxx.fbcdn.net/v/t51/thumb.jpg", "width": 1080, "height": 1920, "quality": null, "expires_at": "2026-08-08 07:51:36 UTC" } ] }, "credits_used": 1 }
/instagram/reels/{shortcode}Returns reel-specific data by shortcode — video view count, play count, like and comment counts, audio/music attribution, and cover image URL.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
shortcode | string | path | Reel shortcode (e.g. DBxQz1aP9Kv from instagram.com/reels/DBxQz1aP9Kv/) |
curl "https://api.scrapingisnotacrime.com/v1/instagram/reels/DBxQz1aP9Kv" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "shortcode": "DBxQz1aP9Kv", "type": "video", "caption": "Golden hour in the Serengeti. #nature", "play_count": 8200000, "likes": 612000, "comments": 4871, "duration": 29.8, "cover_url": "https://...", "video_url": "https://...", "audio": { "title": "Original audio", "artist": "natgeo" }, "timestamp": "2026-06-10T09:00:00Z" }, "credits_used": 1 }
TikTok
Access public TikTok profiles and individual videos.
/tiktok/profile/{username}Returns public profile metadata — follower count, total likes, video count, bio, verification status, and engagement rate.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
username | string | path | TikTok username without @ |
curl "https://api.scrapingisnotacrime.com/v1/tiktok/profile/natgeo" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "username": "natgeo", "nickname": "National Geographic", "followers": 3200000, "following": 84, "likes": 41200000, "videos": 612, "verified": true, "bio": "Experience the world through our lens.", "avatar_url": "https://..." }, "credits_used": 1 }
/tiktok/video/{videoId}Returns full details for a single public TikTok video — view/like/share/comment counts, duration, cover image, and audio information.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
videoId | string | path | TikTok numeric video ID |
YouTube
List a channel's public videos by handle.
/youtube/channel/{handle}/videosReturns the public videos published by a channel, identified by its @handle — title, video ID, thumbnail, publish date, and view count.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
handle | string | path | Channel handle without @ (e.g. natgeo) |
curl "https://api.scrapingisnotacrime.com/v1/youtube/channel/natgeo/videos" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "videos": [ { "video_id": "dQw4w9WgXcQ", "title": "Inside the Amazon rainforest", "thumbnail_url": "https://...", "published_at": "2026-06-20T14:00:00Z", "views": 1284000 } ] }, "credits_used": 1 }
App Store
Search public apps and read customer reviews from the Apple App Store.
/appstore/searchSearches public apps on the Apple App Store by name or keyword. Returns app metadata — developer, price, rating, genres, screenshots, and more.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
term | string | query·req | Search term (e.g. instagram) |
country | string | query·opt | 2-letter country code (ISO 3166-1 alpha-2). Default us. |
limit | integer | query·opt | Number of results, 1–200. Default 10. |
curl "https://api.scrapingisnotacrime.com/v1/appstore/search?term=instagram&country=us&limit=1" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "term": "instagram", "country": "us", "resultCount": 1, "apps": [ { "id": 389801252, "bundleId": "com.burbn.instagram", "name": "Instagram", "developer": "Instagram, Inc.", "url": "https://apps.apple.com/us/app/instagram/id389801252", "iconUrl": "https://...", "price": 0, "currency": "USD", "rating": 4.7, "ratingCount": 25000000, "version": "312.0", "genres": [ "Photo & Video", "Social Networking" ], "screenshots": [ "https://..." ] } ] }, "credits_used": 1 }
/appstore/reviewsReturns customer reviews for a public app, sorted by most recent. Apple's own feed caps at 10 pages (roughly 500 reviews) — requesting further pages returns a 400.
Parameters
| Name | Type | In | Description |
|---|---|---|---|
appId | string | query·req | Numeric App Store app ID (the id field from a search result) |
country | string | query·opt | 2-letter country code (ISO 3166-1 alpha-2). Default us. |
page | integer | query·opt | Review page, 1–10. Default 1. |
curl "https://api.scrapingisnotacrime.com/v1/appstore/reviews?appId=389801252&country=us&page=1" \ -H "X-API-Key: sinac_••••••"
{ "success": true, "data": { "appId": "389801252", "country": "us", "page": 1, "reviews": [ { "id": "14288247378", "author": "exampleuser", "rating": 4, "title": "Great app overall", "content": "Does what it says, minor bugs here and there.", "version": "437.2.0", "updatedAt": "2026-07-10T18:19:36-07:00", "voteCount": 3, "voteSum": 2 } ] }, "credits_used": 1 }
X / Twitter
coming soonTweets, profiles, search, timelines, trends, and reply threads from public X accounts.