Skip to main content
If you call Apify’s TikTok or Instagram scraper today, point the same client at SideShift. The actor names, inputs, and item fields stay the same. Change two values: your token and your base URL.

What changes

Send the token as an Authorization: Bearer header, or as a ?token= query parameter. The apify-client library sends it as a header for you.
Do not add /v2 to the Python client’s api_url. The client adds it for you. Direct HTTP calls use the full path, for example https://app.sideshift.app/api/v2/acts/clockworks~tiktok-scraper/runs.
Without a client library, call the HTTP API directly:
cURL

Supported actors and inputs

SideShift supports two actors: clockworks/tiktok-scraper and apify/instagram-scraper. Each actor accepts a subset of the inputs the Apify actor accepts. The API rejects any other input with a 400 error that names the field.

clockworks/tiktok-scraper

oldestPostDateUnified drops posts older than the date you set. This applies to profiles, hashtags, and search queries. Only a profile run stops paging early at that date. A profile lists its posts newest first. A hashtag or search run does not list posts in date order. It pages through every result and drops old posts along the way. newestPostDate drops posts newer than the date you set. It never stops paging early. excludePinnedPosts is also supported. The API rejects these inputs with a 400 error that names the field:
  • shouldDownloadVideos
  • shouldDownloadCovers
  • shouldDownloadSlideshowImages
  • shouldDownloadAvatars
  • shouldDownloadMusicCovers
  • shouldDownloadSubtitles
  • scrapeRelatedVideos
  • maxFollowersPerProfile, when set to a value greater than 0
  • maxFollowingPerProfile, when set to a value greater than 0
  • profileSorting, unless set to latest
  • profileScrapeSections, unless set to videos

apify/instagram-scraper

directUrls accepts a profile URL, a post or reel URL, or a hashtag URL. resultsType chooses what the run returns for a profile URL. onlyPostsNewerThan stops paging once a page is older than the date you set, for posts and reels. Set resultsType: details and a small searchLimit when you want only the matched profiles. The default resultsType (posts) also fetches each match’s posts, which costs more. The API rejects these inputs with a 400 error that names the field:
  • resultsType, set to mentions or stories
  • searchType, set to place
  • addParentData
resultsType: comments needs a post or reel URL in directUrls. The API rejects a profile or hashtag URL with a 400 error.

Supported endpoints

Every path below starts with https://app.sideshift.app/api/v2. Use acts or actors. Both work.

Billing

A run bills the same credits, at the same price, as the rest of the Scraper API. Each upstream request a run makes costs 1 credit, charged from your account’s balance. The run object’s usageTotalUsd field reports the cost in dollars: credits charged, multiplied by your account’s average purchase price per credit.
SideShift keeps a run and its dataset items for 7 days. After 7 days, SideShift deletes them. Save any items you need to keep.

Differences from Apify

Not supported:
  • Webhooks. The API rejects a webhooks value on every endpoint that starts a run, with a 400 error. This includes POST /acts/{actor}/runs and both methods of run-sync-get-dataset-items.
  • Key-value stores.
  • Tasks.
  • The legacy run-sync endpoint. The API rejects it with a 400 error. Use run-sync-get-dataset-items instead.
  • CSV, XLSX, and other dataset formats. Use format=json or format=jsonl.
Limits:
  • A run can request at most 1,000 inputs. Split a larger request into several runs.
  • To start a run, your balance must have at least 1 credit for each input.
  • An account can have at most 25 runs in progress. The API rejects another run with a 429 error.
Fields that are null. Every field in an Apify item exists in the matching SideShift item, with the same name and type. When SideShift cannot fill a field, the field is null, never missing. Examples:
  • TikTok: on hashtag and search items, authorMeta.fans, authorMeta.heart, and authorMeta.video are null. Video width and height are also null.
  • Instagram: on a profile, latestPosts, businessCategoryName, and highlightReelCount are null.

Quickstart

Create a Scraper key and make your first request.

Billing, errors, and limits

Credit costs, purchase rates, and rate-limit handling.