Instagram Profile Posts API
Scrape Instagram Profile Posts data with one API call. Returns a list of recent posts from an Instagram user's profile: caption, media URL, media type, timestamp, like count and comment count. Instagram is currently returning two record widths in the same page on this surface, and the narrow one carries no like count, no comment count and no author display name, so those three leaves can be null on some rows of a page and populated on others, with a different set of rows affected on each call. Every row still carries its id, URL, caption, timestamp and picture. When you need the engagement for a specific post, pass its URL to /v1/instagram/post/stats; for a whole feed with share counts merged in, use /v1/instagram/profile/posts/full. Collaborative posts (Instagram's native "Collab" feature) are fully resolved: `post.ext.coauthors` lists every co-author account as `{ id, username, full_name, is_verified, profile_pic_url }`. Read it whenever you list a profile: a collab post has a single producer and appears in every co-author's grid, so `post.author` is whichever account created the post and is not always the handle you queried. The complete set of accounts on a post is `post.author.username` plus every `username` in `post.ext.coauthors`. An empty array means Instagram reports the post as not a collab; on a narrow record the key is absent rather than empty, which means the question was not answered for that row, so treat absent and `[]` as different. Note: engagement.shares is null on this endpoint (the upstream carries no per-post share count); to additionally merge in per-post share counts where a second source exposes them (coverage varies by account), use /v1/instagram/profile/posts/full. With trim=true every field above is still returned, except that `post.ext.coauthors` is omitted and `post.flags.pinned` is null, because the trimmed upstream record carries neither signal. Trim does not change the two record widths described at the top: those vary per row whether or not you set it.
Last updated September 2026Maintained by the SocialCrawl team
Returns a user's recent posts with caption, like and comment counts, media URL, media type, and timestamp; share counts are not included. Collab posts list every co-author under ext.coauthors.
Use it for a plain feed pull; profile/posts/full adds per-post share counts. On a collab post the author is whoever created it, so read ext.coauthors for everyone on it.
Searching 65 platforms in parallel
What can you do with the Profile Posts API?
The Profile Posts endpoint gives you structured Instagram data with computed fields in a single request. No scraping infrastructure to build or maintain.
Example Request
curl -H "x-api-key: YOUR_API_KEY" \
"https://www.socialcrawl.dev/v1/instagram/profile/posts?handle=instagram"import requests
response = requests.get(
"https://www.socialcrawl.dev/v1/instagram/profile/posts",
params={
'handle': 'instagram',
},
headers={"x-api-key": "YOUR_API_KEY"},
)
data = response.json()const response = await fetch(
"https://www.socialcrawl.dev/v1/instagram/profile/posts?handle=instagram",
{
headers: { "x-api-key": "YOUR_API_KEY" },
},
);
const data = await response.json();Parameters
| Parameter | Required | Description |
|---|---|---|
| handle | Yes | Instagram username without the @ symbol |
| next_max_id | No | Cursor to get next page of results. |
| trim | No | Set to true to request the lighter upstream record. The differences trim itself makes are that `post.ext.coauthors` is omitted and `post.flags.pinned` is null, because the trimmed record carries neither signal; every other canonical field is still returned. Trim does not affect the two record widths described above, which vary per row in both modes. |
What does the Instagram Profile Posts API return?
Every response follows one unified schema. Here is a real, unmodified response body, so you can see the exact fields you get back before spending a credit.
Example response
{
"success": true,
"platform": "tiktok",
"endpoint": "/v1/tiktok/profile/videos",
"data": {
"items": [
{
"post": {
"id": "7658005300657638669",
"url": "https://www.tiktok.com/@charlidamelio/video/7658005300657638669",
"content": {
"text": "dc @lara.joanna ",
"media_urls": "https://v19.tiktokcdn-eu.com/4a08329b68e24d90b840a05c9244ba65/6a498c37/video/tos/alisg/tos-alisg-ve-37c799-sg/ocXRU4saOAVGYeJRAAygAjFIzOGsgRf4peSeXk/?a=1233&bti=MzU8OGYpNHYpNzo5ZjEuLjpkLTptNDQwOg%3D%3D&&bt=1135&ft=ERfCkaZWD00Q12Nvr-HxzIxRA7lGF3_45SY&mime_type=video_mp4&rc=OTg8NGkzZTQ8PDo1NmQ2O0BpanEzd205cmRlPDMzZzczNEAvNWM0NDFfNi8xMjExNF5eYSNmMGwyMmQ0LzBhLS1kMS9zcw%3D%3D&vvpl=1&l=20260703224143F66ABC3BD3A97DB0685C&btag=e000b0000",
"thumbnail_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-useast5-p-0068-tx/owxEmiGPia440JkI3PgALU3bB7aBAlzdBEsKB~tplv-tiktokx-cropcenter-q:300:400:q70.heic?dr=9232&refresh_token=bf18ce44&x-expires=1783202400&x-signature=8AANrRWOCWfS6xtQ9JJiHB77vxo%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=132edbea&idc=no1a&biz_tag=tt_video&s=PUBLISH&sc=cover",
"duration_seconds": 16.903
},
"author": {
"username": "charlidamelio",
"display_name": "charli d’amelio",
"avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ee31de49ddf64b45c5b2e3c55fbd0ea4~tplv-tiktokx-cropcenter-q:1080:1080:q70.heic?dr=9608&idc=no1a&ps=87d6e48a&refresh_token=e0b099bd&s=PUBLISH&sc=avatar&shcp=132edbea&shp=d05b14bd&t=223449c4&x-expires=1783202400&x-signature=9SsuimlpGdsdlerisiaqvDVLV3c%3D",
"verified": true
},
"engagement": {
"views": 3417578,
"likes": 501973,
"comments": 2618,
"shares": 6304,
"saves": 22989
},
"flags": {
"nsfw": null,
"spoiler": null,
"pinned": false,
"deleted": false
},
"published_at": "2026-07-02T18:51:58.000Z",
"ext": {
"music_id": "7656080164593437471",
"published_at_epoch": 1783018318
}
},
"computed": {
"engagement_rate": 0.14949,
"language": null,
"content_category": "other",
"estimated_reach": 4101094
}
},
{
"post": {
"id": "7657606229484670221",
"url": "https://www.tiktok.com/@charlidamelio/video/7657606229484670221",
"content": {
"text": "@Alexa Davis ",
"media_urls": "https://v19.tiktokcdn-eu.com/07ada727f60ed77f8504c4c9aee6f992/6a498c31/video/tos/alisg/tos-alisg-ve-37c799-sg/oAmE41FRfIDnKlQAZjDgfcEsqFENRqYDSBGUSB/?a=1233&bti=MzU8OGYpNHYpNzo5ZjEuLjpkLTptNDQwOg%3D%3D&&bt=857&ft=ERfCkaZWD00Q12Nvr-HxzIxRA7lGF3_45SY&mime_type=video_mp4&rc=NWU8OTg2aTw6ODlpNDU1PEBpanlrNmw5cmxuPDMzZzczNEBfLTEtMy8tXzYxLzYvYTNfYSNlbGVvMmRrYC9hLS1kMS9zcw%3D%3D&vvpl=1&l=20260703224143F66ABC3BD3A97DB0685C&btag=e000b0000",
"thumbnail_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-useast5-p-0068-tx/ooZRDflKEE2SIFSfsAqgFBcFEORUAY4jBDl2Yc~tplv-tiktokx-cropcenter-q:300:400:q70.heic?dr=9232&refresh_token=0ee7ce0e&x-expires=1783202400&x-signature=DiqCJ1sMgLvKp5k1aK2lKgBm7CU%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=132edbea&idc=no1a&biz_tag=tt_video&s=PUBLISH&sc=cover",
"duration_seconds": 10.123
},
"author": {
"username": "charlidamelio",
"display_name": "charli d’amelio",
"avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ee31de49ddf64b45c5b2e3c55fbd0ea4~tplv-tiktokx-cropcenter-q:1080:1080:q70.heic?dr=9608&idc=no1a&ps=87d6e48a&refresh_token=e0b099bd&s=PUBLISH&sc=avatar&shcp=132edbea&shp=d05b14bd&t=223449c4&x-expires=1783202400&x-signature=9SsuimlpGdsdlerisiaqvDVLV3c%3D",
"verified": true
},
"engagement": {
"views": 7205601,
"likes": 739100,
"comments": 1943,
"shares": 6268,
"saves": 28516
},
"flags": {
"nsfw": null,
"spoiler": null,
"pinned": false,
"deleted": false
},
"published_at": "2026-07-01T17:03:22.000Z",
"ext": {
"music_id": "7656080164593437471",
"published_at_epoch": 1782925402
}
},
"computed": {
"engagement_rate": 0.103713,
"language": null,
"content_category": "other",
"estimated_reach": 8646721
}
},
{
"post": {
"id": "7657287641641143565",
"url": "https://www.tiktok.com/@charlidamelio/video/7657287641641143565",
"content": {
"text": null,
"media_urls": "https://v19.tiktokcdn-eu.com/24d5a0ceaf069ce4435f27d4a1fb7fa5/6a498c2d/video/tos/alisg/tos-alisg-ve-37c799-sg/o4IuEqzEKBC3UgRghYEA5FEDZJDB2RL2JfePpS/?a=1233&bti=M0BzMzU8OGYpNzo5Zi5wIzEuLjpkNDQwOg%3D%3D&&bt=939&ft=ERfCkaZWD00Q12Nvr-HxzIxRA7lGF3_45SY&mime_type=video_mp4&rc=O2Q8M2k1Nzo7ODkzPGQ2NkBpM3VrZmo5cm01PDMzZzczNEBiYC0yLjU0XjQxNTMxX2FhYSNjZy5mMmRzYC9hLS1kMS9zcw%3D%3D&vvpl=1&l=20260703224143F66ABC3BD3A97DB0685C&btag=e000b0000",
"thumbnail_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-useast5-p-0068-tx/oEEehFBRSDqxRYEZJgMgAQpzEf2PJiDEJNI7CB~tplv-tiktokx-cropcenter-q:300:400:q70.heic?dr=9232&refresh_token=7ef5f605&x-expires=1783202400&x-signature=10x4mFTkwGHZf2I3P%2FcRrZr6vTo%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=132edbea&idc=no1a&biz_tag=tt_video&s=PUBLISH&sc=cover",
"duration_seconds": 6.467
},
"author": {
"username": "charlidamelio",
"display_name": "charli d’amelio",
"avatar_url": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/ee31de49ddf64b45c5b2e3c55fbd0ea4~tplv-tiktokx-cropcenter-q:1080:1080:q70.heic?dr=9608&idc=no1a&ps=87d6e48a&refresh_token=e0b099bd&s=PUBLISH&sc=avatar&shcp=132edbea&shp=d05b14bd&t=223449c4&x-expires=1783202400&x-signature=9SsuimlpGdsdlerisiaqvDVLV3c%3D",
"verified": true
},
"engagement": {
"views": 5941789,
"likes": 941067,
"comments": 3165,
"shares": 17173,
"saves": 18760
},
"flags": {
"nsfw": null,
"spoiler": null,
"pinned": false,
"deleted": false
},
"published_at": "2026-06-30T20:27:04.000Z",
"ext": {
"music_id": "7530783142774065975",
"published_at_epoch": 1782851224
}
},
"computed": {
"engagement_rate": 0.161804,
"language": null,
"content_category": null,
"estimated_reach": 7130147
}
}
],
"next_cursor": "1782516110000",
"total": 10,
"dropped": 0
},
"credits_used": 1,
"credits_remaining": 9999,
"request_id": "req-8Kq2ZmR4vT9xLb3P",
"cached": false,
"pagination": {
"next_cursor": "sc.eyJ2IjoyLCJjIjoiMTc4MjUxNjExMDAwMCIsInAiOiJtYXhfY3Vyc29yIn0",
"has_more": true,
"page_size": 10
}
}Example captured from the TikTok API. Every SocialCrawl endpoint returns this same unified schema, so your Instagram Profile Posts response has the same fields.
How does the Instagram Profile Posts API work?
Send a GET request with your API key and get back clean, structured JSON in our unified schema. Supported computed fields are populated when the source provides the required inputs.
Method
GET
Response
JSON
How do you scrape social media data in seconds?
The fastest social media scraping API for developers. Scrape profiles, posts, comments, and analytics from 65 platforms covering 10B+ monthly active users.
One schema, every platform
Query 65 platforms with identical response structures. Write your integration once.
Computed fields, not just scraped
When an endpoint supports these metrics and the source provides the required inputs, the normalized record includes engagement_rate, estimated_reach, content_category, and language. Ready to use.
See your data before you code
Visual Data Explorer. Paste any URL, get rich result cards, sortable tables, CSV export.
import requests
response = requests.get(
'https://www.socialcrawl.dev/v1/tiktok/profile',
params={'handle': 'charlidamelio'},
headers={'x-api-key': 'sc_YOUR_API_KEY'}
)
data = response.json(){
"success": true,
"platform": "tiktok",
"data": {
"author": {
"username": "charlidamelio",
"followers": 152400000
},
"engagement": {
"likes": 12400000000,
"engagement_rate": 0.087
},
"metadata": {
"language": "en",
"content_category": "lifestyle"
}
}
}Have a question? We got answers
Find answers to frequently asked questions about SocialCrawl's API, pricing, and capabilities.
Contact usHow do I list a user's Instagram posts with an API?
How do I paginate through Instagram posts?
Does the Instagram Posts API return photos and videos?
How much does the Instagram Posts API cost per request?
How recent are the posts returned?
Ask AI about SocialCrawl
Ready to scrape Instagram Profile Posts data?
Get your API key and start pulling Instagram data in under 60 seconds.
