# ScrapeField

> One API for Google Maps, LinkedIn, Instagram and TikTok. One key, each platform's data in its own documented shape, a published credit cost per endpoint, usage-based billing with no plans or tiers, and failed calls refunded automatically.

Base URL: `https://scrapefield.com/v1`. Auth: `Authorization: Bearer sf_live_…`. Every read is a GET with query parameters.
Responses are `{ "data": …, "meta": { request_id, credits_charged, credits_remaining, cached, fetched_at, next_cursor } }`.
Errors are `{ "error": { type, code, message, docs, request_id } }`. Branch on `code`; it is stable.
Pagination is cursor-only: pass `meta.next_cursor` back as `cursor`.
Each platform's objects are named the way the platform names them: Google Maps after Google's Places API, Instagram after the Graph API, TikTok after TikTok's own APIs, LinkedIn after the words on its pages. Every documented key is always present.
A field is `null` when the platform does not show it — never 0.
Try any endpoint with no key by adding `?demo=true`: it returns realistic sample data in the identical shape, charges nothing, and needs no account.

## Endpoints

### Google Maps

- [GET /v1/google-maps/places](https://scrapefield.com/docs/google-maps/places.md) — Search Google Maps for businesses and places. 3 credits. Requires: query.
- [GET /v1/google-maps/place](https://scrapefield.com/docs/google-maps/place.md) — Get one Google Maps place in full. 3 credits. Requires: one of place_id|url.
- [GET /v1/google-maps/reviews](https://scrapefield.com/docs/google-maps/reviews.md) — Get the reviews for a place. 3 credits. Requires: one of place_id|url.
- [GET /v1/google-maps/photos](https://scrapefield.com/docs/google-maps/photos.md) — Get the photos for a place. 2 credits. Requires: one of place_id|url.

### LinkedIn

- [GET /v1/linkedin/profile](https://scrapefield.com/docs/linkedin/profile.md) — Get a public LinkedIn profile. 10 credits. Requires: one of url|vanity_name.
- [GET /v1/linkedin/company](https://scrapefield.com/docs/linkedin/company.md) — Get a public LinkedIn company page. 6 credits. Requires: one of url|vanity_name.
- [GET /v1/linkedin/posts](https://scrapefield.com/docs/linkedin/posts.md) — Get recent posts from a person or company. 6 credits. Requires: one of profile_url|company_url.
- [GET /v1/linkedin/jobs](https://scrapefield.com/docs/linkedin/jobs.md) — Search public job postings. 4 credits. Requires: query.

### Instagram

- [GET /v1/instagram/profile](https://scrapefield.com/docs/instagram/profile.md) — Get a public Instagram profile. 3 credits. Requires: one of username|url.
- [GET /v1/instagram/posts](https://scrapefield.com/docs/instagram/posts.md) — Get recent posts from a profile. 3 credits. Requires: one of username|url.
- [GET /v1/instagram/post](https://scrapefield.com/docs/instagram/post.md) — Get one post. 2 credits. Requires: one of url|shortcode.
- [GET /v1/instagram/comments](https://scrapefield.com/docs/instagram/comments.md) — Get the comments on a post. 3 credits. Requires: one of url|shortcode.
- [GET /v1/instagram/hashtag](https://scrapefield.com/docs/instagram/hashtag.md) — Get recent posts for a hashtag. 4 credits. Requires: tag.

### TikTok

- [GET /v1/tiktok/profile](https://scrapefield.com/docs/tiktok/profile.md) — Get a public TikTok profile. 3 credits. Requires: one of username|url.
- [GET /v1/tiktok/videos](https://scrapefield.com/docs/tiktok/videos.md) — Get recent videos from a profile. 3 credits. Requires: one of username|url.
- [GET /v1/tiktok/video](https://scrapefield.com/docs/tiktok/video.md) — Get one video. 2 credits. Requires: one of url|id.
- [GET /v1/tiktok/comments](https://scrapefield.com/docs/tiktok/comments.md) — Get the comments on a video. 3 credits. Requires: one of url|id.
- [GET /v1/tiktok/search](https://scrapefield.com/docs/tiktok/search.md) — Search TikTok. 4 credits. Requires: query.

## Also

- [OpenAPI spec](https://scrapefield.com/v1/openapi.json) — complete, with `x-credits` on every operation
- [Full documentation as one file](https://scrapefield.com/llms-full.txt)
- [MCP server](https://scrapefield.com/mcp) — the same endpoints as tools, with a no-key demo mode
- [Agent skill](https://scrapefield.com/skill.md) — when to reach for this API and what the traps are; drop it in as a Claude Skill or a Cursor rule
- [Docs index](https://scrapefield.com/docs.md) — every page on this site is also served as Markdown: add `.md` to any URL
- [Errors](https://scrapefield.com/docs/errors.md) — every code, when it happens and what to do
- [Pricing](https://scrapefield.com/pricing.md) — the credit table
- [Status](https://scrapefield.com/status) — success rate and latency per endpoint, from real traffic


---

# Full reference

## Google Maps

### GET /v1/google-maps/places

Find businesses and places on Google Maps by a text query, optionally around a point. Each result is the full listing: place_id, name, categories, formatted_address, location, rating and user_ratings_total, phone, website, opening_hours and business_status — named as in Google's Places API. Use this to build a list of businesses in an area; use google-maps/place when you already have a place_id.

**Cost:** 3 credits. Cached for 24h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `query` · string · required — What to search for, e.g. "coffee shops in Brooklyn" or "dentist".
- `lat` · number · -90–90 — Latitude of the point to search around.
- `lng` · number · -180–180 — Longitude of the point to search around.
- `radius_m` · integer · default 5000 · 100–50000 — Search radius in metres around lat/lng.
- `country` · string — Two-letter country code to bias results, e.g. `us`.
- `language` · string · default en — Two-letter language code for localised text, e.g. `en`, `de`.
- `limit` · integer · default 20 · 1–20 — How many results to return, 1–20.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/google-maps/places?query=coffee%20shops%20in%20Brooklyn"
```

Returns an array of `google_maps_place`. The fields are under Objects, below.

### GET /v1/google-maps/place

Fetch one Google Maps listing in full: name, categories, formatted_address, location, rating, user_ratings_total, rating_distribution, price_level, phone numbers, website, opening_hours, popular_times, the About tab and business_status. Accepts a Google place_id — from a search, the Places API or anywhere else — or a Google Maps URL.

**Cost:** 3 credits. Cached for 24h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `place_id` · string · one of the place identifiers — Google's place ID, e.g. from a search result or the Places API.
- `url` · string · one of the place identifiers — A Google Maps URL for the place.
- `language` · string · default en — Two-letter language code for localised text, e.g. `en`, `de`.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/google-maps/place?place_id=ChIJN1t_tDeuEmsRUsoyG83frY4"
```

Returns one `google_maps_place`. The fields are under Objects, below.

### GET /v1/google-maps/reviews

Fetch Google reviews for one place: rating, text, language, publish_time, the author (with their Local Guide badge and review count), photos and the owner_response where there is one. Use this for review monitoring and sentiment work.

**Cost:** 3 credits. Cached for 6h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `place_id` · string · one of the place identifiers — Google's place ID.
- `url` · string · one of the place identifiers — A Google Maps URL for the place.
- `sort` · enum · one of relevant, newest, highest, lowest · default relevant — Order of the reviews.
- `limit` · integer · default 20 · 1–20 — How many results to return, 1–20.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/google-maps/reviews"
```

Returns an array of `google_maps_review`. The fields are under Objects, below.

### GET /v1/google-maps/photos

Fetch the photos on one place's listing: URL, dimensions and who uploaded each. The URLs point at Google's CDN; we do not rehost images.

**Cost:** 2 credits. Cached for 24h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `place_id` · string · one of the place identifiers — Google's place ID.
- `url` · string · one of the place identifiers — A Google Maps URL for the place.
- `limit` · integer · default 20 · 1–20 — How many results to return, 1–20.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/google-maps/photos"
```

Returns an array of `google_maps_photo`. The fields are under Objects, below.

## LinkedIn

### GET /v1/linkedin/profile

Fetch a public LinkedIn profile: full_name, headline, about, location, follower_count, connection_count, current_company, experience, education and skills — as a logged-out visitor sees them. Use this to enrich a person from their profile URL.

**Cost:** 10 credits. Cached for 12h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `url` · string · one of the profile identifiers — The profile URL, e.g. `https://www.linkedin.com/in/someone`.
- `vanity_name` · string · one of the profile identifiers — The part after `/in/` in the URL, e.g. `someone`.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/linkedin/profile?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fexample"
```

Returns one `linkedin_profile`. The fields are under Objects, below.

### GET /v1/linkedin/company

Fetch a public LinkedIn company page: name, tagline, description, website, industry, company_size, employees_on_linkedin, headquarters, company_type, founded, specialties and follower_count. Use this to enrich a company from its LinkedIn URL.

**Cost:** 6 credits. Cached for 24h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `url` · string · one of the company identifiers — The company page URL.
- `vanity_name` · string · one of the company identifiers — The part after `/company/` in the URL, e.g. `acme-inc`.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/linkedin/company?vanity_name=example-co"
```

Returns one `linkedin_company`. The fields are under Objects, below.

### GET /v1/linkedin/posts

Fetch recent public posts by one person or company: text, images, video, document or article, published_at, and reaction_count (with the breakdown by kind), comment_count and repost_count.

**Cost:** 6 credits. Cached for 3h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `profile_url` · string · one of the author identifiers — A person's profile URL.
- `company_url` · string · one of the author identifiers — A company page URL.
- `limit` · integer · default 20 · 1–20 — How many results to return, 1–20.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/linkedin/posts"
```

Returns an array of `linkedin_post`. The fields are under Objects, below.

### GET /v1/linkedin/jobs

Search public LinkedIn job postings by keyword and location. Returns title, company, location, workplace_type, employment_type, seniority_level, salary where shown, listed_at and the description.

**Cost:** 4 credits. Cached for 3h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `query` · string · required — Job title or keywords, e.g. "backend engineer".
- `location` · string — Place name, e.g. "Berlin" or "United States".
- `workplace_type` · enum · one of on-site, hybrid, remote — Only roles of this kind, as LinkedIn's filter names them.
- `posted_within_days` · integer · 1–90 — Only roles posted in the last N days.
- `limit` · integer · default 25 · 1–25 — How many results to return, 1–25.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/linkedin/jobs?query=backend%20engineer"
```

Returns an array of `linkedin_job`. The fields are under Objects, below.

## Instagram

### GET /v1/instagram/profile

Fetch a public Instagram account: username, name, biography, bio_links, followers_count, follows_count, media_count, is_verified, is_private, is_business_account, category and the business contact buttons — named as in Instagram's Graph API. Use this for creator discovery and audience sizing.

**Cost:** 3 credits. Cached for 12h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `username` · string · one of the profile identifiers — The username, without the leading @.
- `url` · string · one of the profile identifiers — The profile URL.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/instagram/profile?username=nasa"
```

Returns one `instagram_profile`. The fields are under Objects, below.

### GET /v1/instagram/posts

Fetch recent public posts and Reels by one Instagram account: shortcode, permalink, media_type, caption, timestamp, media_url, carousel children, like_count, comments_count, view_count, hashtags, mentions and the paid-partnership label.

**Cost:** 3 credits. Cached for 3h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `username` · string · one of the profile identifiers — The username, without the leading @.
- `url` · string · one of the profile identifiers — The profile URL.
- `limit` · integer · default 24 · 1–24 — How many results to return, 1–24.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/instagram/posts?username=nasa"
```

Returns an array of `instagram_post`. The fields are under Objects, below.

### GET /v1/instagram/post

Fetch one Instagram post or Reel by its URL or shortcode: caption, media, username, timestamp, like_count, comments_count and view_count.

**Cost:** 2 credits. Cached for 3h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `url` · string · one of the post identifiers — The post URL.
- `shortcode` · string · one of the post identifiers — The shortcode from the URL, e.g. `C1a2B3c4D5e`.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/instagram/post"
```

Returns one `instagram_post`. The fields are under Objects, below.

### GET /v1/instagram/comments

Fetch comments on one Instagram post: username, text, timestamp, like_count, reply_count and parent_id for replies. Use this for social listening and campaign verification.

**Cost:** 3 credits. Cached for 1h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `url` · string · one of the post identifiers — The post URL.
- `shortcode` · string · one of the post identifiers — The post shortcode.
- `limit` · integer · default 50 · 1–50 — How many results to return, 1–50.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/instagram/comments"
```

Returns an array of `instagram_comment`. The fields are under Objects, below.

### GET /v1/instagram/hashtag

Fetch recent public posts carrying one hashtag, each a full post. Use this for trend and campaign monitoring.

**Cost:** 4 credits. Cached for 1h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `tag` · string · required — The hashtag, without the leading #.
- `limit` · integer · default 24 · 1–24 — How many results to return, 1–24.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/instagram/hashtag?tag=sourdough"
```

Returns an array of `instagram_post`. The fields are under Objects, below.

## TikTok

### GET /v1/tiktok/profile

Fetch a public TikTok account: username, display_name, bio_description, bio_url, is_verified, follower_count, following_count, likes_count and video_count — named as in TikTok's own APIs. Use this for creator discovery and audience sizing.

**Cost:** 3 credits. Cached for 12h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `username` · string · one of the profile identifiers — The username, without the leading @.
- `url` · string · one of the profile identifiers — The profile URL.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/tiktok/profile?username=nasa"
```

Returns one `tiktok_profile`. The fields are under Objects, below.

### GET /v1/tiktok/videos

Fetch recent public videos by one TikTok account: video_description, create_time, duration, cover_image_url, view_count, like_count, comment_count, share_count, favorites_count, hashtag_names and the sound.

**Cost:** 3 credits. Cached for 3h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `username` · string · one of the profile identifiers — The username, without the leading @.
- `url` · string · one of the profile identifiers — The profile URL.
- `limit` · integer · default 30 · 1–30 — How many results to return, 1–30.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/tiktok/videos?username=nasa"
```

Returns an array of `tiktok_video`. The fields are under Objects, below.

### GET /v1/tiktok/video

Fetch one TikTok video by URL or id: video_description, username, create_time, duration, the counts, the sound and whether duets and stitches are allowed.

**Cost:** 2 credits. Cached for 3h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `url` · string · one of the video identifiers — The video URL.
- `id` · string · one of the video identifiers — The numeric video id.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/tiktok/video"
```

Returns one `tiktok_video`. The fields are under Objects, below.

### GET /v1/tiktok/comments

Fetch comments on one TikTok video: username, text, create_time, like_count, reply_count and parent_comment_id for replies.

**Cost:** 3 credits. Cached for 1h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `url` · string · one of the video identifiers — The video URL.
- `id` · string · one of the video identifiers — The numeric video id.
- `limit` · integer · default 50 · 1–50 — How many results to return, 1–50.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/tiktok/comments"
```

Returns an array of `tiktok_comment`. The fields are under Objects, below.

### GET /v1/tiktok/search

Search TikTok by keyword. Returns videos by default; `type=user` returns accounts and `type=hashtag` returns hashtags. Use this for trend research and creator discovery when you do not already have a username.

**Cost:** 4 credits. Cached for 1h; a cached answer costs the same and reports `cached: true` with the original `fetched_at`.

**Parameters**

- `query` · string · required — What to search for.
- `type` · enum · one of video, user, hashtag · default video — What kind of result to return.
- `limit` · integer · default 30 · 1–30 — How many results to return, 1–30.
- `cursor` · string — The `meta.next_cursor` from the previous page. Omit for the first page.
- `fresh` · boolean · default false — Skip the cache and fetch now. Charged normally. Not available on trial credits — buy any pack to unlock it.

**Example**

```bash
curl -H "Authorization: Bearer $API_KEY" \
  "https://scrapefield.com/v1/tiktok/search?query=sourdough%20starter"
```

Returns an array of `tiktok_video`. With `type=user`, `tiktok_profile` instead. With `type=hashtag`, `tiktok_hashtag` instead. The fields are under Objects, below.

## Objects

Every key is present on every call; a field that can be null says so.

### `google_maps_place`

One business or place, as its Google Maps listing shows it.

- `place_id` (string) — Google's place ID — the same one the Places API and every Maps URL use.
- `name` (string) — As the listing shows it.
- `category` (string, or null) — The category printed under the name, e.g. "Coffee shop".
- `categories` (array of strings) — Every category on the listing, the main one first.
- `formatted_address` (string, or null) — The address as one line, as Google formats it.
- `address` (object) — The same address in parts.
- `address.street` (string, or null) — Street and number.
- `address.city` (string, or null)
- `address.region` (string, or null) — State, province or region.
- `address.postal_code` (string, or null)
- `address.country_code` (string, or null) — ISO 3166-1 alpha-2, e.g. `US`.
- `location` (object) — The pin.
- `location.lat` (number) — Latitude.
- `location.lng` (number) — Longitude.
- `plus_code` (string, or null) — The global plus code, e.g. `87G8P2QX+RV`.
- `rating` (number, or null) — The star rating, 1.0–5.0. `null` until the place has ratings.
- `user_ratings_total` (integer, or null) — How many ratings the star rating is the average of.
- `rating_distribution` (object, or null) — How many ratings of each star value, as the listing's bar chart shows them.
- `rating_distribution.1` (integer)
- `rating_distribution.2` (integer)
- `rating_distribution.3` (integer)
- `rating_distribution.4` (integer)
- `rating_distribution.5` (integer)
- `price_level` (integer, or null) — 0 (free) to 4 (very expensive), as the Places API counts it.
- `formatted_phone_number` (string, or null) — The phone number in local format.
- `international_phone_number` (string, or null) — With the country code, e.g. `+1 718-555-0142`.
- `website` (URL, or null) — The business's own site.
- `url` (URL) — The place on Google Maps.
- `business_status` (string, one of OPERATIONAL | CLOSED_TEMPORARILY | CLOSED_PERMANENTLY) — As the Places API reports it.
- `opening_hours` (object, or null) — Regular opening hours. `null` when the listing has none.
- `opening_hours.weekday_text` (array of strings) — Seven lines, Monday first, as the listing prints them.
- `opening_hours.periods` (array of objects) — The same hours as data. A place open around the clock has one period with no `close`.
- `opening_hours.periods[].open` (object)
- `opening_hours.periods[].open.day` (integer) — 0 is Sunday.
- `opening_hours.periods[].open.time` (string) — 24-hour `HHMM`, local time.
- `opening_hours.periods[].close` (object, or null)
- `opening_hours.periods[].close.day` (integer) — 0 is Sunday.
- `opening_hours.periods[].close.time` (string) — 24-hour `HHMM`, local time.
- `popular_times` (array of objects, or null) — The "Popular times" chart. `null` for places too quiet to have one.
- `popular_times[].day` (integer) — 0 is Sunday.
- `popular_times[].busyness` (array of integers) — Twenty-four values, midnight first, 0–100 relative to the place's busiest hour.
- `about` (object, by heading) — The listing's About tab, by heading: `service_options`, `accessibility`, `amenities`, `payments` and so on — only the headings the place has.
- `claimed` (boolean, or null) — Whether the owner has claimed the listing. Unclaimed ones offer "Own this business?".
- `photo` (object, or null) — The listing's main photo.
- `photo.url` (URL) — The image on Google's CDN. We do not rehost images.
- `photo.width` (integer, or null) — Pixels.
- `photo.height` (integer, or null) — Pixels.
- `photo.author_name` (string, or null) — Who uploaded it, as the listing credits them. `null` for the owner's own photos.
- `photo.author_url` (URL, or null) — Their Google Maps contributor page.

### `google_maps_review`

One Google review of a place.

- `review_id` (string) — Google's id for the review.
- `place_id` (string) — The place it is about.
- `author` (object)
- `author.name` (string) — As shown on the review.
- `author.url` (URL, or null) — Their Google Maps contributor page.
- `author.profile_photo_url` (URL, or null)
- `author.is_local_guide` (boolean) — Whether they carry the Local Guide badge.
- `author.review_count` (integer, or null) — How many reviews they have written, as the review shows.
- `author.photo_count` (integer, or null) — How many photos they have posted.
- `rating` (integer) — 1 to 5.
- `text` (string, or null) — `null` for a rating with no words.
- `language` (string, or null) — Two-letter code of the language it was written in.
- `publish_time` (time, ISO 8601 UTC) — When it was posted.
- `like_count` (integer, or null) — How many people marked it helpful.
- `photos` (array of objects) — Photos attached to the review.
- `photos[].url` (URL) — The image on Google's CDN. We do not rehost images.
- `photos[].width` (integer, or null) — Pixels.
- `photos[].height` (integer, or null) — Pixels.
- `photos[].author_name` (string, or null) — Who uploaded it, as the listing credits them. `null` for the owner's own photos.
- `photos[].author_url` (URL, or null) — Their Google Maps contributor page.
- `owner_response` (object, or null) — The "Response from the owner", where there is one.
- `owner_response.text` (string)
- `owner_response.publish_time` (time, ISO 8601 UTC, or null)

### `google_maps_photo`

One photo on a place's listing.

- `url` (URL) — The image on Google's CDN. We do not rehost images.
- `width` (integer, or null) — Pixels.
- `height` (integer, or null) — Pixels.
- `author_name` (string, or null) — Who uploaded it, as the listing credits them. `null` for the owner's own photos.
- `author_url` (URL, or null) — Their Google Maps contributor page.

### `linkedin_profile`

A public LinkedIn profile, as a logged-out visitor sees it.

- `vanity_name` (string) — The part after `/in/` in the profile URL.
- `url` (URL) — The profile.
- `full_name` (string)
- `first_name` (string, or null)
- `last_name` (string, or null)
- `headline` (string, or null) — The line under the name.
- `about` (string, or null) — The About section.
- `location` (string, or null) — As printed, e.g. "Berlin, Germany".
- `profile_picture_url` (URL, or null)
- `follower_count` (integer, or null)
- `connection_count` (integer, or null) — LinkedIn stops counting at 500: a value of 500 means "500+".
- `open_to_work` (boolean, or null) — Whether the profile shows the #OpenToWork frame.
- `current_company` (object, or null) — The employer shown at the top of the profile.
- `current_company.name` (string)
- `current_company.url` (URL, or null) — The company page, where it has one.
- `experience` (array of objects) — Positions, most recent first.
- `experience[].title` (string)
- `experience[].company` (object) — The employer.
- `experience[].company.name` (string)
- `experience[].company.url` (URL, or null) — The company page, where it has one.
- `experience[].employment_type` (string, or null) — As printed: "Full-time", "Contract", …
- `experience[].location` (string, or null)
- `experience[].start_date` (string, or null) — `YYYY-MM`, or `YYYY` where the profile gives only a year.
- `experience[].end_date` (string, or null) — `YYYY-MM` or `YYYY`; `null` for a current role, or where the profile gives no date.
- `experience[].description` (string, or null)
- `education` (array of objects) — Schools, most recent first.
- `education[].school` (object) — The school, and its LinkedIn page where it has one.
- `education[].school.name` (string)
- `education[].school.url` (URL, or null) — The company page, where it has one.
- `education[].degree` (string, or null)
- `education[].field_of_study` (string, or null)
- `education[].start_year` (integer, or null)
- `education[].end_year` (integer, or null)
- `skills` (array of strings) — As listed on the profile.

### `linkedin_company`

A public LinkedIn company page.

- `company_id` (string) — LinkedIn's numeric id for the company.
- `vanity_name` (string) — The part after `/company/` in the page URL.
- `url` (URL) — The company page.
- `name` (string)
- `tagline` (string, or null) — The line under the name.
- `description` (string, or null) — The About overview.
- `website` (URL, or null)
- `industry` (string, or null)
- `company_size` (string, or null) — The band LinkedIn prints, e.g. "51-200 employees".
- `employees_on_linkedin` (integer, or null) — How many members list it as their employer.
- `headquarters` (object, or null)
- `headquarters.city` (string, or null)
- `headquarters.geographic_area` (string, or null) — State or region.
- `headquarters.country` (string, or null) — ISO 3166-1 alpha-2.
- `company_type` (string, or null) — As printed: "Privately Held", "Public Company", …
- `founded` (integer, or null) — The year.
- `specialties` (array of strings)
- `follower_count` (integer, or null)
- `logo_url` (URL, or null)

### `linkedin_post`

A public LinkedIn post.

- `urn` (string) — LinkedIn's id for the post, e.g. `urn:li:activity:7243…`.
- `url` (URL) — The post.
- `author` (object)
- `author.name` (string)
- `author.type` (string, one of person | company)
- `author.headline` (string, or null) — The person's headline, or the company's follower line.
- `author.url` (URL) — Their profile or company page.
- `text` (string, or null) — The post's text.
- `published_at` (time, ISO 8601 UTC)
- `reaction_count` (integer) — All reactions together.
- `reactions` (object, or null) — By kind, where LinkedIn shows the breakdown.
- `reactions.like` (integer)
- `reactions.celebrate` (integer)
- `reactions.support` (integer)
- `reactions.love` (integer)
- `reactions.insightful` (integer)
- `reactions.funny` (integer)
- `comment_count` (integer)
- `repost_count` (integer)
- `images` (array of URLs) — Image URLs, in order.
- `video` (object, or null)
- `video.url` (URL)
- `video.duration` (integer, or null) — Seconds.
- `document` (object, or null) — An attached PDF or slide deck.
- `document.title` (string)
- `document.page_count` (integer, or null)
- `article` (object, or null) — A shared link.
- `article.title` (string)
- `article.url` (URL)
- `is_repost` (boolean) — Whether this is someone else's post reposted without comment.

### `linkedin_job`

A public LinkedIn job posting.

- `job_id` (string) — LinkedIn's numeric id — the number in `/jobs/view/…`.
- `url` (URL) — The posting.
- `title` (string)
- `company` (object) — Who is hiring.
- `company.name` (string)
- `company.url` (URL, or null) — The company page, where it has one.
- `location` (string, or null) — As printed, e.g. "Berlin, Germany".
- `workplace_type` (string, one of On-site | Hybrid | Remote, or null)
- `employment_type` (string, or null) — "Full-time", "Part-time", "Contract", …
- `seniority_level` (string, or null) — "Entry level", "Mid-Senior level", …
- `salary` (string, or null) — As printed, where the posting shows one, e.g. "€70K/yr - €90K/yr".
- `listed_at` (time, ISO 8601 UTC) — When it was posted.
- `easy_apply` (boolean, or null) — Whether it takes applications on LinkedIn. `null` where the listing does not say.
- `description` (string, or null) — The full description, as text.

### `instagram_profile`

A public Instagram account.

- `id` (string) — Instagram's numeric id for the account.
- `username` (string) — Without the @.
- `name` (string, or null) — The display name.
- `biography` (string, or null)
- `website` (URL, or null) — The link in the bio.
- `bio_links` (array of objects) — Every link in the bio.
- `bio_links[].title` (string, or null)
- `bio_links[].url` (URL)
- `profile_picture_url` (URL, or null)
- `followers_count` (integer)
- `follows_count` (integer)
- `media_count` (integer) — Posts on the grid.
- `is_verified` (boolean)
- `is_private` (boolean) — A private account shows its counts and nothing else.
- `is_business_account` (boolean) — A business or creator account.
- `category` (string, or null) — The label under the name, e.g. "Bakery" or "Public figure".
- `business_email` (string, or null) — Behind the Email button, where a business account shows one.
- `business_phone_number` (string, or null) — Behind the Call button.
- `highlight_reel_count` (integer) — Story highlights on the profile.

### `instagram_post`

A public Instagram post or Reel.

- `id` (string) — Instagram's numeric id for the post.
- `shortcode` (string) — The code in the URL, e.g. `C1a2B3c4D5e`.
- `permalink` (URL) — The post.
- `media_type` (string, one of IMAGE | VIDEO | CAROUSEL_ALBUM) — As the Graph API names them.
- `media_product_type` (string, one of FEED | REELS) — A grid post or a Reel.
- `caption` (string, or null)
- `timestamp` (time, ISO 8601 UTC) — When it was posted.
- `username` (string) — Who posted it.
- `media_url` (URL) — The image, or the video file. A carousel's first item.
- `thumbnail_url` (URL, or null) — The cover of a video.
- `children` (array of objects) — A carousel's items, in order. Empty for a single image or video.
- `children[].media_type` (string, one of IMAGE | VIDEO)
- `children[].media_url` (URL)
- `video_duration` (number, or null) — Seconds.
- `like_count` (integer, or null) — `null` when the owner has hidden it.
- `comments_count` (integer)
- `view_count` (integer, or null) — Views, for videos and Reels.
- `hashtags` (array of strings) — The caption's hashtags, without the #.
- `mentions` (array of strings) — The usernames the caption mentions, without the @.
- `location` (object, or null) — The location tag.
- `location.id` (string)
- `location.name` (string)
- `is_paid_partnership` (boolean) — Whether it carries the "Paid partnership" label.

### `instagram_comment`

A comment on an Instagram post.

- `id` (string)
- `media_id` (string) — The post it is on.
- `parent_id` (string, or null) — The comment it replies to. `null` for a top-level comment.
- `username` (string)
- `text` (string)
- `timestamp` (time, ISO 8601 UTC)
- `like_count` (integer)
- `reply_count` (integer)

### `tiktok_profile`

A public TikTok account.

- `username` (string) — Without the @.
- `display_name` (string, or null)
- `bio_description` (string, or null)
- `bio_url` (URL, or null) — The link in the bio.
- `avatar_url` (URL, or null)
- `profile_url` (URL) — The profile.
- `is_verified` (boolean)
- `follower_count` (integer)
- `following_count` (integer)
- `likes_count` (integer) — Likes across all their videos.
- `video_count` (integer)

### `tiktok_video`

A public TikTok video.

- `id` (string) — TikTok's numeric id — the number at the end of the URL.
- `share_url` (URL) — The video.
- `username` (string) — Who posted it.
- `video_description` (string, or null) — The caption.
- `create_time` (time, ISO 8601 UTC) — When it was posted.
- `duration` (integer) — Seconds.
- `cover_image_url` (URL, or null)
- `play_url` (URL, or null) — The video file on TikTok's CDN. TikTok signs it and it stops working after a while, so fetch it soon. We do not rehost videos.
- `view_count` (integer)
- `like_count` (integer)
- `comment_count` (integer)
- `share_count` (integer)
- `favorites_count` (integer, or null) — Saves. `null` where the page does not show them.
- `hashtag_names` (array of strings) — Without the #.
- `region_code` (string, or null) — Where it was posted from, ISO 3166-1 alpha-2.
- `music` (object, or null) — The sound.
- `music.id` (string)
- `music.title` (string)
- `music.author` (string, or null)
- `music.original` (boolean) — An original sound rather than a track.
- `duet_enabled` (boolean)
- `stitch_enabled` (boolean)

### `tiktok_comment`

A comment on a TikTok video.

- `id` (string)
- `video_id` (string) — The video it is on.
- `parent_comment_id` (string, or null) — The comment it replies to. `null` for a top-level comment.
- `username` (string)
- `text` (string)
- `create_time` (time, ISO 8601 UTC)
- `like_count` (integer)
- `reply_count` (integer)

### `tiktok_hashtag`

A TikTok hashtag, from a search.

- `hashtag_name` (string) — Without the #.
- `url` (URL) — The hashtag page.
- `video_count` (integer, or null)
- `view_count` (integer, or null)

## Errors

### `key_in_url` (invalid_request)

The key was sent as `?api_key=` in the URL.

Send it in the `Authorization: Bearer …` header. A key that has been in URLs may be in someone's logs: consider revoking it.

### `missing_api_key` (authentication_error)

No Authorization header was sent.

Send `Authorization: Bearer sf_live_…`. Create a key in the dashboard.

### `invalid_api_key` (authentication_error)

The key is unknown or was revoked.

Check the key, or create a new one. Revoked keys never come back.

### `insufficient_credits` (permission_error)

The account is out of credits.

Buy a pack on the dashboard’s billing page; calls work again at once. Nothing was charged for this call.

### `scope_not_allowed` (permission_error)

The key is scoped to some surfaces and this is not one of them.

Use a key with the surface in its scopes, or widen the key.

### `fresh_not_available` (permission_error)

`fresh=true` on an account that has never bought credits.

Trial credits are cache-first. Buy any amount of credits to bypass the cache.

### `disposable_email` (invalid_request)

Signup with a throwaway mailbox provider.

Use an address you will still have next month. We send one verification email and then only write when something breaks.

### `signup_rate_limit` (permission_error)

Too many signups from one address in an hour.

Email us if you genuinely need several keys — we will just make them.

### `invalid_link` (invalid_request)

A sign-in or confirmation link that is not ours.

Check you copied the whole link — mail apps sometimes break long links across lines — or ask for a new one from the sign-in page.

### `link_used` (invalid_request)

A sign-in or confirmation link opened a second time.

Links work once. Ask for a new one from the sign-in page.

### `link_expired` (invalid_request)

A sign-in link older than fifteen minutes, or a confirmation link older than a day.

Ask for a new one from the sign-in page; it goes to the same address.

### `email_rate_limit` (permission_error)

Five emails to one inbox in an hour, however many callers asked for them.

Check that inbox and its spam folder for the ones already sent, or try again in an hour.

### `sign_in_rate_limit` (permission_error)

Ten sign-in emails from one address in an hour.

Check your inbox and spam folder for the ones already sent — each works for fifteen minutes.

### `account_closed` (permission_error)

Signing in to, or signing up with, an account that has been closed.

Email us if you want it back. A closed account is not reopened by signing up again.

### `unverified_account` (permission_error)

Calling the API before confirming your email address.

Open the link we emailed. Confirming the address adds the trial credits and signs you in.

### `unknown_endpoint` (not_found)

The path is not one of the documented endpoints.

See the endpoint list at /docs. Paths are `/v1/{surface}/{resource}`.

### `missing_parameter` (invalid_request)

A required parameter was not given.

The message names it. Every parameter is documented on the endpoint page.

### `missing_one_of` (invalid_request)

An endpoint that accepts either of two identifiers got neither.

Give exactly one of the parameters the message names.

### `invalid_parameter` (invalid_request)

A parameter was the wrong type or out of range.

The message says what was expected and what arrived.

### `invalid_cursor` (invalid_request)

The cursor was not one we issued.

Pass `meta.next_cursor` from the previous page verbatim, or omit it.

### `profile_not_found` (not_found)

No account exists for that username or URL.

Check the username. Usernames are case-insensitive and exclude the leading @.

### `place_not_found` (not_found)

No place exists for that id or URL.

Place ids come from a search. A place that has closed permanently may stop resolving.

### `subject_suppressed` (not_found)

The account or place asked us not to serve it, and we do not.

Nothing to fix on your side, and nothing was charged. In a list, rows about them are left out.

### `results_expired` (not_found)

A batch job finished more than seven days ago, and its results were deleted, as the privacy notice says.

Run the job again. Download results within seven days of a job finishing.

### `post_not_found` (not_found)

No post or video exists at that URL or id.

The post may have been deleted or made private.

### `concurrency_limit` (rate_limit)

More requests are in flight than the account allows.

Retry after the seconds in `Retry-After`. Concurrency is what we limit, not requests per second, and it rises with credits purchased.

### `upstream_unavailable` (upstream_error)

We could not complete the fetch in time.

Retry. This call was not charged, and the refund is already in your usage ledger.

### `internal_error` (internal_error)

Something broke on our side.

This call was not charged. If it repeats, send us the request_id.
