Skip to main content
POST
Social research
Every mode returns normalized output shared by all six platforms. The Provider’s native output is not repeated there; it stays on the Run and is readable with Get Run. A value a platform or Provider does not report is null. Read result_status separately from status: success, no_result, error or pending. An empty but valid answer is no_result and keeps the mode’s shape: items or profiles is [], or every field is null. charge_usd totals this response’s runs. For a pending Apify route (HTTP 202), follow the authenticated result_url. See Provider selection and charges.

Output by mode

Fields follow the field conventions.
  • published_at is ISO 8601 UTC, or null when the Provider gives no exact time (YouTube search results).
  • title is the Reddit or YouTube title. text is the body only (Reddit self-text, YouTube description, the tweet, caption or post text), and is null when there is none.
  • bio is the free-text description (LinkedIn: the About section). headline is the LinkedIn job-title line. website is the account’s own site: the LinkedIn company website or the expanded X profile link.
  • likes is Reddit’s net score (can be negative), X favorites, TikTok diggs, or likes and reactions elsewhere. shares is X retweets, TikTok share-sheet sends, or LinkedIn reposts. views is X impressions, TikTok plays, or YouTube and Instagram video views.
  • In find, platform is the lower-case network name (twitter becomes x), and handle is usable as the social_research handle. scrapecreators_confidence is ScrapeCreators’ 0–1 score per profile. pdl_likelihood is People Data Labs’ 1–10 match score for the whole person, filled only on linkedin.find.
  • LinkedIn id is the bare activity id, without the urn:li:activity: prefix.

Headers

idempotency-key
string
required

Generate a unique value for each intended execution (a UUID is recommended). Retry with the same key and execution parameters to retrieve the original Run without a second charge. Changing execution parameters with the same key returns 409; changing task_id or metadata does not update the original Run.

Minimum string length: 1

Body

application/json
platform
enum<string>
required
Available options:
reddit,
x,
youtube,
tiktok,
instagram,
linkedin
mode
enum<string> | null

Default: search. Every platform supports each mode.

  • search: posts matching query.
  • profile: account details from handle (Reddit: subreddit). For LinkedIn, supply a person or company url.
  • feed: recent posts or videos from handle. For LinkedIn, supply a company url.
  • post: one post or video from url.
  • find: other social profiles from handle. For LinkedIn, supply a person's profile url; for Reddit, supply query to find subreddits.
Available options:
search,
profile,
feed,
post,
find
provider
enum<string> | null

Default auto: select the first eligible Provider in Glasser's preference order. A named Provider must support the request and be allowed by your Key; it does not fall back to another Provider. Available values are listed below.

Available options:
auto,
scrapecreators,
apify,
tikhub,
pdl
query
string | null
Required string length: 1 - 500
handle
string | null

A username without @, or a subreddit name without r/.

Required string length: 1 - 100
url
string | null
Required string length: 1 - 2048
metadata

Optional tracking fields, returned on the Run and available as filters. They never go to the Provider or affect routing, Price, or idempotency.

  • Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.
  • Values: strings of 1–500 characters.
  • user_id: your End user's opaque ID, never their email address or name.

Invalid entries are dropped whole, not truncated. The request continues, and the Run returns the fields that were stored.

Response

Success

id
string
required
run_url
string
required

Open this Run in the console. Requires Workspace membership.

provider
string
required
Pattern: ^[a-z0-9][a-z0-9-]*$
endpoint
string
required
Pattern: ^\/.+$
endpoint_version
integer
required
status
enum<string>
required

QUEUED or RUNNING: still in progress. COMPLETED: a Provider response is available, including non-2xx responses. FAILED: read failure. STOPPED: stopped before dispatch. Read charge_usd separately from status.

Available options:
QUEUED,
RUNNING,
COMPLETED,
FAILED,
STOPPED
failure
object | null
required

Why the Run failed. Non-null only when status is FAILED.

input
object
required
output
object
required

Normalized fields per mode, shared by every platform. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a platform or Provider does not report are null.

  • profile: platform, handle, name, url, bio, headline, website, followers, following, posts, verified
  • search: items[]: id, url, title, text, author, author_url, published_at, likes, comments, shares, views
  • feed: items[]: same post fields as search
  • post: id, url, title, text, author, author_url, published_at, likes, comments, shares, views
  • find: profiles[]: platform, url, handle, scrapecreators_confidence, followers (Reddit: matching subreddits); pdl_likelihood
provider_response
object | null
required

Non-null only when status is COMPLETED.

  • For 2xx responses, output contains Provider-native JSON (any shape), or null for an empty body.
  • For non-2xx responses, error contains the Provider's error body and output is null.

Sensitive fields are removed from both bodies.

charge_usd
string | null
required

Total charge of runs in this Solution response. Null until all listed Runs settle. Each Run retains its own charge; failures can also be charged.

Pattern: ^(0|[1-9]\d*)\.(\d{2}|\d{2}\d{0,3}[1-9])$
charge_basis
object | null
required

Single-Run charge basis, or null for a multi-Run total. Read runs[].charge_basis for each charge.

stoppable
boolean
required

Whether a stop request can currently be accepted. This does not guarantee that the Run can stop before dispatch.

stop_requested_at
string<date-time> | null
required

When a stop was requested. The Run can still continue if dispatch had already started.

created_at
string<date-time>
required

ISO-8601 UTC timestamp

started_at
string<date-time> | null
required

ISO-8601 UTC timestamp

completed_at
string<date-time> | null
required

ISO-8601 UTC timestamp

task_id
string | null
required
metadata
object
required

Your stored tracking fields. Use them to filter Runs. They never go to the Provider or affect routing, Price, or idempotency.

  • Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.
  • Values: strings of 1–500 characters.
  • user_id: your End user's opaque ID, never their email address or name.
action
string
required

<platform>.<mode>; a LinkedIn company page in profile mode is linkedin.company.

Pattern: ^[a-z]+\.[a-z]+$
result_status
enum<string>
required

Business delivery status, independent of the final Run lifecycle in status. no_result is an empty but valid answer; error means the Provider output could not be delivered.

Available options:
success,
no_result,
error,
pending
error
object | null
required
runs
object[]
required
result_url
string
required

Authenticated, read-only URL path for polling this normalized result and total charge. Use with the API origin. Does not create Runs or resume fallback. GET /v1/runs/:id still returns the native, individual Run.