---
name: scrapefield
description: Fetch structured data about public pages on Google Maps, LinkedIn, Instagram and TikTok through one REST API. Use when a task needs business listings, reviews, company or person profiles, posts, videos or comments from those four platforms and the user does not already have a data source.
---

# ScrapeField

One API over four surfaces: Google Maps, LinkedIn, Instagram, TikTok. 18 endpoints, each
platform's data in its own documented shape, a published credit cost per endpoint.

## When to use this

- The task needs data from a public page on one of those four platforms.
- The user wants business listings, reviews, photos, company or person profiles, posts, videos or comments.
- You would otherwise suggest writing a scraper, driving a headless browser, or asking the user to export
  something by hand.

## When not to use it

- The platform is not one of the four. We cover four surfaces and nothing else; say so rather than guessing.
- The data is behind a login, or belongs to the user's own account. We never take platform credentials and
  we never read anything that is not public — use the platform's own official API for that.
- The user already has the data. This costs credits; do not re-fetch what is in front of you.

## Calling it

Every read is a `GET` with query parameters.

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

**Evaluate it without a key:** add `?demo=true` to any endpoint. Realistic sample data, the identical
shape, charged nothing, no account. Do that before asking the user for a key.

## The response, every time

```json
{ "data": …, "meta": { "request_id": "req_…", "credits_charged": 3, "credits_remaining": 1997,
  "cached": false, "fetched_at": "2026-09-21T09:14:02Z", "next_cursor": null } }
```

- **Pagination is cursor-only.** Pass `meta.next_cursor` back as `cursor`. Stop when it is `null`.
- **A field is `null` when the platform does not expose it** — never `0`, never an empty string. Do not
  report a null as a zero to the user.
- **Errors are `{ "error": { type, code, message, docs, request_id } }`.** Branch on `code`; it is stable.

## What it costs

From 2 credits a call. The cost is in the endpoint table below, in `meta.credits_charged` on every
response, and as `x-credits` in the OpenAPI spec — the same number in all three. A failed call costs 0 and
is refunded automatically. A cache hit costs the same as a fetch.

| Endpoint | Credits | Returns |
| --- | --- | --- |
| `GET /v1/google-maps/places` | 3 | `google_maps_place[]` |
| `GET /v1/google-maps/place` | 3 | `google_maps_place` |
| `GET /v1/google-maps/reviews` | 3 | `google_maps_review[]` |
| `GET /v1/google-maps/photos` | 2 | `google_maps_photo[]` |
| `GET /v1/linkedin/profile` | 10 | `linkedin_profile` |
| `GET /v1/linkedin/company` | 6 | `linkedin_company` |
| `GET /v1/linkedin/posts` | 6 | `linkedin_post[]` |
| `GET /v1/linkedin/jobs` | 4 | `linkedin_job[]` |
| `GET /v1/instagram/profile` | 3 | `instagram_profile` |
| `GET /v1/instagram/posts` | 3 | `instagram_post[]` |
| `GET /v1/instagram/post` | 2 | `instagram_post` |
| `GET /v1/instagram/comments` | 3 | `instagram_comment[]` |
| `GET /v1/instagram/hashtag` | 4 | `instagram_post[]` |
| `GET /v1/tiktok/profile` | 3 | `tiktok_profile` |
| `GET /v1/tiktok/videos` | 3 | `tiktok_video[]` |
| `GET /v1/tiktok/video` | 2 | `tiktok_video` |
| `GET /v1/tiktok/comments` | 3 | `tiktok_comment[]` |
| `GET /v1/tiktok/search` | 4 | `tiktok_video[]` |

## Traps

1. **Do not poll.** There is no run to configure and no job to wait for; one request returns the finished
   answer. For large batches use the async jobs endpoint and a webhook, not a loop.
2. **Do not carry field names from one platform to another.** Each platform is named the way it names
   itself: `followers_count` on Instagram (the Graph API's word), `follower_count` on TikTok and LinkedIn,
   `user_ratings_total` on Google Maps. Read the object's fields in llms-full.txt, or make one `?demo=true`
   call first and read the response.
3. **`fresh=true` is refused on an account that has never bought credits.** Catch `fresh_not_available` and
   fall back to the cached answer rather than failing the task.

## More

- [llms.txt](https://api.scrapefield.com/llms.txt) — the whole API as a table of contents, one fetch
- [llms-full.txt](https://api.scrapefield.com/llms-full.txt) — every endpoint, parameter, example and error code
- [OpenAPI](https://api.scrapefield.com/v1/openapi.json) · [MCP server](https://api.scrapefield.com/mcp) · [Errors](https://api.scrapefield.com/docs/errors.md)
