Social Dash Scraper
Documentation v0.1OpenAPI

Link in bio API

Pillar

Live private service

Retrieve a public Pillar creator profile, social links, link click counts, and featured products.

Read the public shop data that powers a Pillar page. Get profile details, social accounts, ordered links, and product listings in one response.

Base URLhttp://localhost:3010

Local development example. Replace with your service origin.

Get a Pillar page

GET/v1/pillar

Accepts a public Pillar profile URL. Returns profile fields, links, and products at the top level, matching the reference API's data shape. Outbound URLs are returned as data and never visited.

Query parameters

FieldTypeDescription
urlstringRequired. An HTTPS pillar.io/<username> URL. www, case, tracking parameters, and fragments are canonicalized; nested paths and custom domains are unsupported.

Response fields

FieldTypeDescription
idstringPublished creator UUID, checked against the requested public shop handle and record ownership.
first_namestring | nullStructured account first name from Pillar’s public-client query. Upstream nulls are preserved; this is not inferred from a display name.
last_namestring | nullStructured account last name from Pillar’s public-client query; upstream nulls are preserved.
email_primarystring | nullPrimary account email from Pillar’s public-client account query. This may differ from the displayed social email. Explicit upstream nulls are preserved; a failed or missing account response fails the request.
locationstring | nullPublished location text; unknown or unavailable values are null.
emailstring | nullPublic EMAIL social value. Other social channels appear as lowercase top-level keys, such as instagram, tiktok, youtube, github, and threads. Source empty strings and nulls are preserved.
linksarrayOrdered public link records: id, type, title, url, clicks, and order. type and title are the trimmed, lowercase source tagline. Duplicates and source array order are preserved; no sorting by order is applied.
productsarrayFeatured product records: id, title, price, url, name, description, and image. title and name use the published product name. Prices keep source values; no currency conversion is performed. Descriptions may contain markup and are not executed.
requestIdstringIdentifier for correlating the request with operational logs.
accountingobjectUpstream request count, decoded JSON bytes read, and duration. Rejected error bodies are discarded; these are operational counts, not billing totals.
successbooleanTrue when usable data is returned, including partial results.
statusstringsuccess or partial. Failures use failed or challenged and include a failure object.
sourceUrlstringCanonical public profile URL.
fetchedAtstringUTC timestamp of retrieval.
coverageobjectCoverage of supported public profile fields, links, and featured products. Warnings describe missing, malformed, gated, or limited data.

Nested fields and every response variant are in the OpenAPI specification.

Coverage & limits

  • One public profile per request; four concurrent requests per worker. Saturation returns 503 busy.
  • 15-second total deadline and at most five upstream requests, including one shared retry for network errors or HTTP 5xx. Redirects are rejected; 429 and access challenges are not retried.
  • A cold request reads the public shop, page bootstrap, current client bundle, and account metadata. Subsequent requests normally need only shop and account reads. Tokens are sent only to Pillar’s fixed GraphQL endpoint, never to outbound URLs or other workers.
  • 2 MiB total decoded bytes across shop JSON, client bootstrap, client source, and account response. Shop JSON is limited to nesting depth 16 and 20,000 nodes. Payload limits fail explicitly.
  • At most 500 visited links and products combined, processed in that order, and 100 social channels. Record limits produce partial coverage.
  • Private, password-protected, or consent-gated profiles are rejected. Gated records and related builder controls are omitted with a warning. Public presentation visibility flags are not access gates.
  • Missing collections return empty arrays with warnings. Missing metrics return null; they are never substituted with zero. Empty public collections do not add a missing-collection warning.
  • Coverage includes public profile fields, custom links, and featured products. Digital downloads, course lessons, bookings, membership content, funnels, videos, checkout, private analytics, and pagination are not fetched.
  • Fresh public API reads only. The ordinary logged-out frontend credential is discovered from Pillar’s current public client and retained only in memory for up to 15 minutes or its expiry. No account login, cookie jar, destination visits, result caching, billing, or customer key management. No production domain is assumed.
  • If the public client changes, expires, or does not expose the required account fields, retrieval fails explicitly. No primary-email substitution or reduced-field success is returned.

Errors & partial results

HTTPCode / statusMeaning
400invalid_requestMissing/invalid profile URL, duplicate URL, or unsupported parameters.
401unauthorizedMissing or invalid service API key.
403restricted_pageThe profile requires access or consent.
404not_foundThe public profile is missing or inactive.
429upstream_rate_limitedPillar rate limited retrieval; no automatic retry.
502upstream_challengedPillar rejected or challenged the public request.
502unsupported_pageMalformed or unsupported JSON, missing identity, or mismatched profile.
502response_too_large / payload_too_complexThe public JSON exceeds byte, depth, or node limits.
502unsafe_redirect / request_limit / upstream_errorThe bounded retrieval could not complete.
503busyAll worker slots are in use.
504timeoutRetrieval exceeded the total deadline.
502public_client_unavailable / account_metadata_unavailableThe public client or required account metadata could not be verified.
200partialUsable data with warnings about missing, invalid, gated, or truncated records.