Response objects
Each platform in its own shape. A Google Maps place looks like a Google Maps place and a TikTok video like a TikTok video, named the way the platform itself names them.
The four platforms are four different systems. A place has opening hours and a price level; a video has a sound and a duet setting; a LinkedIn profile has experience and education. Forcing them into one “profile” and one “post” would hide exactly the fields you came for, so we don’t. Each object is named after the platform’s own developer API where one describes the same thing — if you have read those docs, you already know these fields:
- Google Maps: named after Google's Places API.
- LinkedIn: named after LinkedIn's own pages, since LinkedIn has no public data API.
- Instagram: named after Instagram's Graph API.
- TikTok: named after TikTok's Display and Research APIs.
What is the same everywhere
The conventions, not the shapes. The { data, meta } envelope and the error format. snake_case keys. Timestamps as ISO 8601 in UTC. The platform’s own ids, as strings, so you can join them to anything else you hold. Counts as integers.
Every key, every time. An object carries every field listed here on every call. A field is null when the platform does not show it — never 0, never a guess — and a list is empty rather than missing. You can index into a response without checking whether a key exists.
Nothing else. The fields below are an allowlist the gateway enforces: anything not on it is dropped before a response leaves, so a field never appears that is not documented here.
Google Maps
google_maps_place
One business or place, as its Google Maps listing shows it. Returned by google-maps/places, google-maps/place.
| Field | What it is |
|---|---|
place_id | Google's place ID — the same one the Places API and every Maps URL use. |
name | As the listing shows it. |
category | The category printed under the name, e.g. "Coffee shop". |
categories | Every category on the listing, the main one first. |
formatted_address | The address as one line, as Google formats it. |
address | The same address in parts. |
address.street | Street and number. |
address.city | |
address.region | State, province or region. |
address.postal_code | |
address.country_code | ISO 3166-1 alpha-2, e.g. US. |
location | The pin. |
location.lat | Latitude. |
location.lng | Longitude. |
plus_code | The global plus code, e.g. 87G8P2QX+RV. |
rating | The star rating, 1.0–5.0. null until the place has ratings. |
user_ratings_total | How many ratings the star rating is the average of. |
rating_distribution | How many ratings of each star value, as the listing's bar chart shows them. |
rating_distribution.1 | |
rating_distribution.2 | |
rating_distribution.3 | |
rating_distribution.4 | |
rating_distribution.5 | |
price_level | 0 (free) to 4 (very expensive), as the Places API counts it. |
formatted_phone_number | The phone number in local format. |
international_phone_number | With the country code, e.g. +1 718-555-0142. |
website | The business's own site. |
url | The place on Google Maps. |
business_status | As the Places API reports it. OPERATIONAL · CLOSED_TEMPORARILY · CLOSED_PERMANENTLY |
opening_hours | Regular opening hours. null when the listing has none. |
opening_hours.weekday_text | Seven lines, Monday first, as the listing prints them. |
opening_hours.periods | The same hours as data. A place open around the clock has one period with no close. |
opening_hours.periods[].open | |
opening_hours.periods[].open.day | 0 is Sunday. |
opening_hours.periods[].open.time | 24-hour HHMM, local time. |
opening_hours.periods[].close | |
opening_hours.periods[].close.day | 0 is Sunday. |
opening_hours.periods[].close.time | 24-hour HHMM, local time. |
popular_times | The "Popular times" chart. null for places too quiet to have one. |
popular_times[].day | 0 is Sunday. |
popular_times[].busyness | Twenty-four values, midnight first, 0–100 relative to the place's busiest hour. |
about | The listing's About tab, by heading: service_options, accessibility, amenities, payments and so on — only the headings the place has. |
claimed | Whether the owner has claimed the listing. Unclaimed ones offer "Own this business?". |
photo | The listing's main photo. |
photo.url | The image on Google's CDN. We do not rehost images. |
photo.width | Pixels. |
photo.height | Pixels. |
photo.author_name | Who uploaded it, as the listing credits them. null for the owner's own photos. |
photo.author_url | Their Google Maps contributor page. |
google_maps_review
One Google review of a place. Returned by google-maps/reviews.
| Field | What it is |
|---|---|
review_id | Google's id for the review. |
place_id | The place it is about. |
author | |
author.name | As shown on the review. |
author.url | Their Google Maps contributor page. |
author.profile_photo_url | |
author.is_local_guide | Whether they carry the Local Guide badge. |
author.review_count | How many reviews they have written, as the review shows. |
author.photo_count | How many photos they have posted. |
rating | 1 to 5. |
text | null for a rating with no words. |
language | Two-letter code of the language it was written in. |
publish_time | When it was posted. |
like_count | How many people marked it helpful. |
photos | Photos attached to the review. |
photos[].url | The image on Google's CDN. We do not rehost images. |
photos[].width | Pixels. |
photos[].height | Pixels. |
photos[].author_name | Who uploaded it, as the listing credits them. null for the owner's own photos. |
photos[].author_url | Their Google Maps contributor page. |
owner_response | The "Response from the owner", where there is one. |
owner_response.text | |
owner_response.publish_time |
google_maps_photo
One photo on a place's listing. Returned by google-maps/photos.
| Field | What it is |
|---|---|
url | The image on Google's CDN. We do not rehost images. |
width | Pixels. |
height | Pixels. |
author_name | Who uploaded it, as the listing credits them. null for the owner's own photos. |
author_url | Their Google Maps contributor page. |
linkedin_profile
A public LinkedIn profile, as a logged-out visitor sees it. Returned by linkedin/profile.
| Field | What it is |
|---|---|
vanity_name | The part after /in/ in the profile URL. |
url | The profile. |
full_name | |
first_name | |
last_name | |
headline | The line under the name. |
about | The About section. |
location | As printed, e.g. "Berlin, Germany". |
profile_picture_url | |
follower_count | |
connection_count | LinkedIn stops counting at 500: a value of 500 means "500+". |
open_to_work | Whether the profile shows the #OpenToWork frame. |
current_company | The employer shown at the top of the profile. |
current_company.name | |
current_company.url | The company page, where it has one. |
experience | Positions, most recent first. |
experience[].title | |
experience[].company | The employer. |
experience[].company.name | |
experience[].company.url | The company page, where it has one. |
experience[].employment_type | As printed: "Full-time", "Contract", … |
experience[].location | |
experience[].start_date | YYYY-MM, or YYYY where the profile gives only a year. |
experience[].end_date | YYYY-MM or YYYY; null for a current role, or where the profile gives no date. |
experience[].description | |
education | Schools, most recent first. |
education[].school | The school, and its LinkedIn page where it has one. |
education[].school.name | |
education[].school.url | The company page, where it has one. |
education[].degree | |
education[].field_of_study | |
education[].start_year | |
education[].end_year | |
skills | As listed on the profile. |
linkedin_company
A public LinkedIn company page. Returned by linkedin/company.
| Field | What it is |
|---|---|
company_id | LinkedIn's numeric id for the company. |
vanity_name | The part after /company/ in the page URL. |
url | The company page. |
name | |
tagline | The line under the name. |
description | The About overview. |
website | |
industry | |
company_size | The band LinkedIn prints, e.g. "51-200 employees". |
employees_on_linkedin | How many members list it as their employer. |
headquarters | |
headquarters.city | |
headquarters.geographic_area | State or region. |
headquarters.country | ISO 3166-1 alpha-2. |
company_type | As printed: "Privately Held", "Public Company", … |
founded | The year. |
specialties | |
follower_count | |
logo_url |
linkedin_post
A public LinkedIn post. Returned by linkedin/posts.
| Field | What it is |
|---|---|
urn | LinkedIn's id for the post, e.g. urn:li:activity:7243…. |
url | The post. |
author | |
author.name | |
author.type | person · company |
author.headline | The person's headline, or the company's follower line. |
author.url | Their profile or company page. |
text | The post's text. |
published_at | |
reaction_count | All reactions together. |
reactions | By kind, where LinkedIn shows the breakdown. |
reactions.like | |
reactions.celebrate | |
reactions.support | |
reactions.love | |
reactions.insightful | |
reactions.funny | |
comment_count | |
repost_count | |
images | Image URLs, in order. |
video | |
video.url | |
video.duration | Seconds. |
document | An attached PDF or slide deck. |
document.title | |
document.page_count | |
article | A shared link. |
article.title | |
article.url | |
is_repost | Whether this is someone else's post reposted without comment. |
linkedin_job
A public LinkedIn job posting. Returned by linkedin/jobs.
| Field | What it is |
|---|---|
job_id | LinkedIn's numeric id — the number in /jobs/view/…. |
url | The posting. |
title | |
company | Who is hiring. |
company.name | |
company.url | The company page, where it has one. |
location | As printed, e.g. "Berlin, Germany". |
workplace_type | On-site · Hybrid · Remote |
employment_type | "Full-time", "Part-time", "Contract", … |
seniority_level | "Entry level", "Mid-Senior level", … |
salary | As printed, where the posting shows one, e.g. "€70K/yr - €90K/yr". |
listed_at | When it was posted. |
easy_apply | Whether it takes applications on LinkedIn. null where the listing does not say. |
description | The full description, as text. |
instagram_profile
A public Instagram account. Returned by instagram/profile.
| Field | What it is |
|---|---|
id | Instagram's numeric id for the account. |
username | Without the @. |
name | The display name. |
biography | |
website | The link in the bio. |
bio_links | Every link in the bio. |
bio_links[].title | |
bio_links[].url | |
profile_picture_url | |
followers_count | |
follows_count | |
media_count | Posts on the grid. |
is_verified | |
is_private | A private account shows its counts and nothing else. |
is_business_account | A business or creator account. |
category | The label under the name, e.g. "Bakery" or "Public figure". |
business_email | Behind the Email button, where a business account shows one. |
business_phone_number | Behind the Call button. |
highlight_reel_count | Story highlights on the profile. |
instagram_post
A public Instagram post or Reel. Returned by instagram/posts, instagram/post, instagram/hashtag.
| Field | What it is |
|---|---|
id | Instagram's numeric id for the post. |
shortcode | The code in the URL, e.g. C1a2B3c4D5e. |
permalink | The post. |
media_type | As the Graph API names them. IMAGE · VIDEO · CAROUSEL_ALBUM |
media_product_type | A grid post or a Reel. FEED · REELS |
caption | |
timestamp | When it was posted. |
username | Who posted it. |
media_url | The image, or the video file. A carousel's first item. |
thumbnail_url | The cover of a video. |
children | A carousel's items, in order. Empty for a single image or video. |
children[].media_type | IMAGE · VIDEO |
children[].media_url | |
video_duration | Seconds. |
like_count | null when the owner has hidden it. |
comments_count | |
view_count | Views, for videos and Reels. |
hashtags | The caption's hashtags, without the #. |
mentions | The usernames the caption mentions, without the @. |
location | The location tag. |
location.id | |
location.name | |
is_paid_partnership | Whether it carries the "Paid partnership" label. |
instagram_comment
A comment on an Instagram post. Returned by instagram/comments.
| Field | What it is |
|---|---|
id | |
media_id | The post it is on. |
parent_id | The comment it replies to. null for a top-level comment. |
username | |
text | |
timestamp | |
like_count | |
reply_count |
TikTok
tiktok_profile
A public TikTok account. Returned by tiktok/profile, tiktok/search.
| Field | What it is |
|---|---|
username | Without the @. |
display_name | |
bio_description | |
bio_url | The link in the bio. |
avatar_url | |
profile_url | The profile. |
is_verified | |
follower_count | |
following_count | |
likes_count | Likes across all their videos. |
video_count |
tiktok_video
A public TikTok video. Returned by tiktok/videos, tiktok/video, tiktok/search.
| Field | What it is |
|---|---|
id | TikTok's numeric id — the number at the end of the URL. |
share_url | The video. |
username | Who posted it. |
video_description | The caption. |
create_time | When it was posted. |
duration | Seconds. |
cover_image_url | |
play_url | 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 | |
like_count | |
comment_count | |
share_count | |
favorites_count | Saves. null where the page does not show them. |
hashtag_names | Without the #. |
region_code | Where it was posted from, ISO 3166-1 alpha-2. |
music | The sound. |
music.id | |
music.title | |
music.author | |
music.original | An original sound rather than a track. |
duet_enabled | |
stitch_enabled |
tiktok_comment
A comment on a TikTok video. Returned by tiktok/comments.
| Field | What it is |
|---|---|
id | |
video_id | The video it is on. |
parent_comment_id | The comment it replies to. null for a top-level comment. |
username | |
text | |
create_time | |
like_count | |
reply_count |
tiktok_hashtag
A TikTok hashtag, from a search. Returned by tiktok/search.
| Field | What it is |
|---|---|
hashtag_name | Without the #. |
url | The hashtag page. |
video_count | |
view_count |