Fetch a profile's posts
Fetch the most recent posts of a specific public profile, by username or full profile URL.
GET /v1/instagram/profile/posts
Private profiles
If the profile is private, the request fails with 403 profile_private and the
message @handle is private. — no posts are returned.
What's included
Posts are returned newest first, each with full engagement metrics (likes,
comments, and play/view counts for reels) and timestamps. Fetch several pages at
once with max_pages, or page through the whole timeline with the returned
next_cursor.
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
profile | string | — | Required. A username (financialtimes), @handle, or full profile URL (https://www.instagram.com/financialtimes/). |
max_pages | integer | 1 | Number of timeline pages to fetch in this request (1–50). Each page returns ~12 posts. Billed per page fetched. |
cursor | string | — | Pagination cursor to resume from. Pass the next_cursor from a previous response to continue where it left off. |
Examples
By username:
curl -G "$LISTENX_BASE/v1/instagram/profile/posts" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'profile=financialtimes'
By full URL:
curl -G "$LISTENX_BASE/v1/instagram/profile/posts" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'profile=https://www.instagram.com/financialtimes/'
Fetch several pages at once:
curl -G "$LISTENX_BASE/v1/instagram/profile/posts" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'profile=financialtimes' \
--data-urlencode 'max_pages=3'
Continue from a previous response's next_cursor:
curl -G "$LISTENX_BASE/v1/instagram/profile/posts" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'profile=financialtimes' \
--data-urlencode 'cursor=AQHTr1eXwTn7iem_iR71E9zWI5c7JLues7pQA8n3EqkrsLj2LHLFlFD…'
Response
{
"username": "financialtimes",
"profile": {
"id": "25004361",
"username": "financialtimes",
"full_name": "Financial Times",
"is_private": false,
"is_verified": true,
"profile_pic_url": "https://…",
"biography": "Instagram feed of the Financial Times. Follow #financialtimes to see more.",
"follower_count": 4836906,
"following_count": null,
"media_count": null
},
"returned": 12,
"pages_fetched": 1,
"has_next_page": true,
"next_cursor": "AQHTr1eXwTn7iem_iR71E9zWI5c7JLues7pQA8n3EqkrsLj2LHLFlFD…",
"results": [
{
"id": "3992704520810931319",
"shortcode": "Ddo75uACCR3",
"url": "https://www.instagram.com/p/Ddo75uACCR3/",
"type": "reel",
"product_type": "clips",
"is_pinned": false,
"taken_at": "2025-10-18T12:04:11+00:00",
"caption": "Robin Wigglesworth and Gillian Tett talk to …",
"hashtags": [],
"mentions": [],
"author": { "username": "financialtimes", "full_name": "Financial Times" },
"media": {
"image": { "url": "https://…", "width": 1080, "height": 1920 },
"video": { "url": "https://…", "width": 1080, "height": 1920 },
"carousel_count": null,
"carousel": []
},
"engagement": {
"like_count": 1843,
"comment_count": 72,
"play_count": 95210,
"views": 95210
}
}
],
"billing": {
"endpoint": "instagram.profile_posts",
"units": 1,
"unit_price": "0.010000",
"amount": "0.010000",
"balance_after": "97.230000",
"request_id": "…"
}
}
Fields
| Field | Description |
|---|---|
profile | Compact profile summary (id, name, privacy, verification, follower count, bio). |
returned | Number of posts in results across the fetched pages. |
pages_fetched | Number of timeline pages actually fetched (also the billed unit count). |
has_next_page | true if the profile has more posts beyond this page. |
next_cursor | Opaque cursor for the next page — pass it back as cursor to continue; null when the timeline is exhausted. |
results[] | Post objects with full engagement metrics and timestamps. |
Billing
Billed per page fetched (1 unit = 1 page). A request with max_pages=3 that
walks all three pages costs 3 units; if the timeline runs out after 2 pages, only
2 are billed. See Billing.