Skip to main content

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​

ParameterTypeDefaultDescription
profilestring—Required. A username (financialtimes), @handle, or full profile URL (https://www.instagram.com/financialtimes/).
max_pagesinteger1Number of timeline pages to fetch in this request (1–50). Each page returns ~12 posts. Billed per page fetched.
cursorstring—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​

FieldDescription
profileCompact profile summary (id, name, privacy, verification, follower count, bio).
returnedNumber of posts in results across the fetched pages.
pages_fetchedNumber of timeline pages actually fetched (also the billed unit count).
has_next_pagetrue if the profile has more posts beyond this page.
next_cursorOpaque 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.