Instagram Posts by user API

Get an account's posts by username, each with text, media_type, like_count and comment_count. The call returns 202 and a job_id first. $0.56 per 1,000 calls.

  • Up to 200 posts per call
  • Returns a job_id, then results
  • No charge for failed or empty results

API health

24h health
79%
24h average time
41.29 s
  • Healthy / normal
  • Available
  • Limited
  • Mostly down
Mostly down

Last 24 hours

Last 30 days

  1. 1Request

    POST /api/v1/social
    {
      "platform": "instagram",
      "action": "user_posts",
      "params": {
        "username": "nasa"
      }
    }
  2. 2JSON response

    {
      "results": [
        {
          "author_id": "",
          "post_id": "De2t82PPyx9",
          "text": "We are not slowing down. 🚀\n\nOur #Artemis III mission will send four astronauts to low Earth orbit next year to test critical systems needed for future lunar landings and we’re accelerating efforts to ensure the success of Artemis IV, the first Artemis mission on the lunar surface…",
          "media_type": "image"
        },
        …
      ],
      "count": 30
    }
  3. 3Rows

    author_idpost_idtextmedia_type
    De2t82PPyx9We are not slowing down. 🚀 Our #Artemis III mission will send four astronauts to low Earth orbit next year to test critical systems needed for future lunar landings and we’re accelerating efforts to ensure the success of Artemis IV, the first Artemis mission on the lunar surface…image
    De1wbZ6l2VyThis disc is 50,000 light-years wide! It's the Sombrero Galaxy — seen here by our orbiting @••• telescope. Its unique appearance could be the result of a long-ago merger with other galaxies. #NASA #Space #Galaxyimage
  4. 4CSV

    instagram-user_posts-sample.csv post_id,url,text,media_type,like_count,comment_count,view_count,author_username,author_name,posted_at,location,id,image_url,video_url,author_id,width,height,is_comments_disabled,author_follower_count,hashtags,top_comments

A request with username and an optional limit goes in and returns 202 with a job_id. You poll the jobs endpoint for the post rows, which become table rows and a CSV file.

What data you get

The table shows rows from a real call for nasa, captured October 24, 2026 at 18:28 (UTC), that returned 30 rows. Gray bars mark removed personal information (••• in the CSV). Your own calls first return a job_id; once the job finishes, you get these fields as listed in the field reference.

post_idurltextmedia_typelike_countcomment_countview_countauthor_usernameauthor_nameposted_atlocationidimage_urlvideo_urlauthor_idwidthheightis_comments_disabledauthor_follower_counthashtagstop_comments
De2t82PPyx9https://www.instagram.com/p/De2t82PPyx9/We are not slowing down. 🚀 Our #Artemis III mission will send four astronauts to low Earth orbit next year to test critical systems needed for future lunar landings and we’re accelerating efforts to ensure the success of Artemis IV, the first Artemis mission on the lunar surface…image46089364nullnasaNASA2026-10-23T23:20:57+00:00null4014598211346836605_528817151https://instagram.fuba2-1.fna.fbcdn.net/v/t51.82787-15/859070372_18661402093049152_3071139610491516778_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=1&ig_cache_key=NDAxNDU5ODIxMTM0NjgzNjYwNTE4NjYxNDAyMDg3MDQ5MTUy.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjcyMC5…https://instagram.fuba2-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQNTkECBw2suz97dudN4wjd5tp7fZgWYJZB6PwTVUGMQU9r4E08_w4KcBLpaInhz4kASzQbv8D4AqHGg8nn8IWBidZ5OR5QfmdqpvN0.mp4?_nc_cat=102&_nc_oc=Adq5bLzGCWm2kVZWdS8bGQwb60nMRQoz0Yl-AbZ3EdrSsTV4Mt8qEBWTMMUiwkNKBeQ&_nc_sid=5e9851&_nc_ht=instagra…10801920nullnullnullnull
De1wbZ6l2Vyhttps://www.instagram.com/p/De1wbZ6l2Vy/This disc is 50,000 light-years wide! It's the Sombrero Galaxy — seen here by our orbiting @••• telescope. Its unique appearance could be the result of a long-ago merger with other galaxies. #NASA #Space #Galaxyimage6932092199nullnasaNASA2026-10-23T14:19:41+00:00null4014327632355616114_528817151https://instagram.fuba2-1.fna.fbcdn.net/v/t51.82787-15/862320651_18661289491049152_6188246238745863140_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=1&ig_cache_key=NDAxNDMyNzU3MzgyODI5NTU0MQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTQ0MC5zZHI…null14401440nullnullnullnull

Use cases

  • Posting rhythm

    Take an account's recent posts and use posted_at and media_type to see how often and in what format it posts.

  • Compare engagement

    Compare like_count and comment_count across one account's posts.

  • Group by topic

    Count the tags in each hashtags array to see which topics an account uses most.

  • Competitor feed

    Pull a competitor's posts on a schedule and read text and location to see what is new.

Instagram Graph API vs EveryInfra

Here is how Instagram's official Graph API and EveryInfra user_posts compare on which accounts you can read, how many posts and access.

ComparedInstagram Graph APIEveryInfra
Which accountsBusiness Discovery: "Since you can make nested requests by specifying an edge via the fields parameter, you can request the targeted professional account’s media edge to get all of its published media objects."username is an account handle without the @ symbol, or a full profile URL.
How many posts"Returns a maximum of 10K of the most recently created media."limit is 1 to 200 and defaults to 30. The full history of an account is not guaranteed.
Access you need"Note that a permission only allows access to data created by the app user who granted the permission."One EveryInfra API key in the Authorization: Bearer header. No Instagram login or Instagram access token is needed.

Quotes are from Meta's developer documentation, checked 2026-11-09. Official sources: Business Discovery (updated 2026-08-12) · IG User Media (updated 2026-09-28) · Instagram Platform overview (updated 2026-10-29)

Limits and gotchas

  • The call is async by default: it returns 202 and a job_id, and you poll GET https://api.everyinfra.com/api/v1/jobs/<job_id> until the job finishes and returns the post rows.
  • limit is an integer from 1 to 200 and defaults to 30; larger values return 422 before any charge.
  • There is no page parameter. One call returns at most 200 rows, can return fewer than limit, and does not guarantee the account's full history.
  • Private Stories and internal reach data are not included.
  • hashtags and top_comments are absent when there is nothing to show. like_count and view_count are null when not disclosed; that is not 0.

Pricing

You pay $0.000556 per call, not per row, and one call reads up to 200 posts. This holds for async jobs too. Failed calls and empty results are not charged.

CallsCost
10,000$5.56
100,000$55.56
1,000,000$555.56

Totals use the list price per call.

Code samples

#
bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "instagram",
  "action": "user_posts",
  "params": {
    "username": "nasa"
  }
}'

OpenAPI definition (JSON)Samples read the key from the EVERYINFRA_API_KEY environment variable; copied code never contains your key.

API reference

See the parameters, response fields, errors and billing for user_posts, and copy the page or open it as Markdown for an AI assistant.

POST

AI prompt

#
Please help me write a data collection script with the EveryInfra Instagram Posts by user endpoint (instagram/user_posts).

How the endpoint works:
- Request: POST https://api.everyinfra.com/api/v1/social with the header Authorization: Bearer <API key>. Read the key from the EVERYINFRA_API_KEY environment variable and never hard-code it.
- In the request body, set platform to instagram and action to user_posts, and put the parameters inside params.
- Required parameters:
  - username: Identifies an Instagram account handle without the @ symbol or as a full profile URL. Used by profile, persona, user_posts, and reels to fetch account data.
- Optional parameters:
  - limit: The most rows to return in this call, an integer from 1 to 200. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge. (default: 30)
- Returns a list of records. Main fields of each record: post_id, url, text, media_type, like_count, comment_count, view_count, author_username, author_name, posted_at, location, id; 21 fields in total, full list at https://api.everyinfra.com/api/v1/social/catalog?platform=instagram.
- Example request body:
{
  "platform": "instagram",
  "action": "user_posts",
  "params": {
    "username": "nasa"
  }
}
- Price: $0.56 per 1,000 requests; failed and empty results are not charged.
- This endpoint is asynchronous by default: it returns 202 and a job_id, then you poll GET https://api.everyinfra.com/api/v1/jobs/{job_id} until the status is succeeded or failed.
- On 422, fix the request using the suggested parameter names and allowed values in the error; on 429 or 503, wait for Retry-After and try again.

Before writing code, ask me which targets I need, how many, which fields, and what output format I want; then confirm the plan and the rough cost with me.

Request parameters

#
NameInTypeRequiredDefaultDescription
AuthorizationheaderstringYes-Bearer followed by your API key. Create it in the console; never put it in a URL or a code repository.
platformbodystringYesinstagramPlatform identifier, fixed value.
actionbodystringYesuser_postsCapability identifier, fixed value.
usernamebody.paramsstringYes-Identifies an Instagram account handle without the @ symbol or as a full profile URL. Used by profile, persona, user_posts, and reels to fetch account data. The followers action returns only total follower counts, whereas followers_list and following_list return account lists.
limitbody.paramsinteger (1–200)No30The most rows to return in this call, an integer from 1 to 200. The default applies when you leave it out, and a call can return fewer rows. Larger values return 422 before any charge.

Response example

#
Captured October 24, 2026 at 18:28 (UTC) by calling this API with the parameters in the code sample above. results and count are that call's real response with personal information (names, handles, avatars, profile links, contact details) removed; the list keeps the first 2. id, billing and quota differ on every call, so only their shape is shown.
json
{  "id": "req_…",  "platform": "instagram",  "action": "user_posts",  "results": [    {      "post_id": "De2t82PPyx9",      "url": "https://www.instagram.com/p/De2t82PPyx9/",      "text": "We are not slowing down. 🚀\n\nOur #Artemis III mission will send four astronauts to low Earth orbit next year to test critical systems needed for future lunar landings and we’re accelerating efforts to ensure the success of Artemis IV, the first Artemis mission on the lunar surface…",      "media_type": "image",      "like_count": 46089,      "comment_count": 364,      "author_username": "nasa",      "author_name": "NASA",      "posted_at": "2026-10-23T23:20:57+00:00",      "id": "4014598211346836605_528817151",      "image_url": "https://instagram.fuba2-1.fna.fbcdn.net/v/t51.82787-15/859070372_18661402093049152_3071139610491516778_n.jpg?stp=dst-jpg_e15_tt6&_nc_cat=1&ig_cache_key=NDAxNDU5ODIxMTM0NjgzNjYwNTE4NjYxNDAyMDg3MDQ5MTUy.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNMSVBTLnhwaWRzLjcyMC5…",      "video_url": "https://instagram.fuba2-1.fna.fbcdn.net/o1/v/t2/f2/m86/AQNTkECBw2suz97dudN4wjd5tp7fZgWYJZB6PwTVUGMQU9r4E08_w4KcBLpaInhz4kASzQbv8D4AqHGg8nn8IWBidZ5OR5QfmdqpvN0.mp4?_nc_cat=102&_nc_oc=Adq5bLzGCWm2kVZWdS8bGQwb60nMRQoz0Yl-AbZ3EdrSsTV4Mt8qEBWTMMUiwkNKBeQ&_nc_sid=5e9851&_nc_ht=instagra…",      "author_id": "•••",      "width": 1080,      "height": 1920    },    {      "post_id": "De1wbZ6l2Vy",      "url": "https://www.instagram.com/p/De1wbZ6l2Vy/",      "text": "This disc is 50,000 light-years wide!\n\nIt's the Sombrero Galaxy — seen here by our orbiting @••• telescope. Its unique appearance could be the result of a long-ago merger with other galaxies.\n\n#NASA #Space #Galaxy",      "media_type": "image",      "like_count": 693209,      "comment_count": 2199,      "author_username": "nasa",      "author_name": "NASA",      "posted_at": "2026-10-23T14:19:41+00:00",      "id": "4014327632355616114_528817151",      "image_url": "https://instagram.fuba2-1.fna.fbcdn.net/v/t51.82787-15/862320651_18661289491049152_6188246238745863140_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=1&ig_cache_key=NDAxNDMyNzU3MzgyODI5NTU0MQ%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkNBUk9VU0VMX0lURU0ueHBpZHMuMTQ0MC5zZHI…",      "author_id": "•••",      "width": 1440,      "height": 1440    }  ],  "count": 30,  "billing": {    "charged": …,    "charged_usd": …,    "balance_after_usd": …,    …  },  "quota": { … }}

Response fields

#

Business data is in results. The table lists the fields a record can contain; values the platform does not show are never made up.

FieldMeaning
post_idKeeps the platform's own meaning
urlLink to the record on the platform.
textBody text with HTML removed, returned in full and never cut short (on a few platforms the list results themselves carry only an excerpt; the platform's field notes say so).
media_typeKeeps the platform's own meaning
like_countLikes. null means the platform or this capability does not disclose it; it is not 0.
comment_countComments. null means not disclosed, not 0.
view_countViews or plays. null means not disclosed, not 0.
author_usernameAuthor's username (@handle), usually usable in URLs.
author_nameAuthor's display name.
posted_atPublish time in ISO 8601, UTC (for example 2026-08-07T12:34:56+00:00). Non-standard strings from the platform are passed through as is, so parse defensively. null means the platform does not disclose it.
locationLocation description passed through as is; the format varies by platform.
idThe record's unique ID on the platform. Unique only within one platform; IDs can repeat across platforms.
image_urlImage link. Capabilities with several images may return an image_urls array.
video_urlKeeps the platform's own meaning
author_idAuthor's unique ID on the platform.
widthKeeps the platform's own meaning
heightKeeps the platform's own meaning
is_comments_disabledKeeps the platform's own meaning
author_follower_countAuthor's follower count. null means not disclosed.
hashtagsHashtags in the text, in order of appearance; absent when there are none.
top_commentsKeeps the platform's own meaning

Errors and billing

#
401
Missing or invalid key.
402
Insufficient balance. Top up first.
422
Invalid parameter name or value. Fix it using the suggestions in the error. No charge.
429
Per-minute request limit reached. Wait for Retry-After, then try again.
503
Could not complete. The held charge is returned to your balance. If the outcome is unknown, verify it before you retry.
200 empty
No data. No charge.

Errors

FAQ

What does the Instagram posts by user API return?

It returns the account's posts: post_id, url, text, media_type, like_count and comment_count, plus hashtags when present. The call returns 202 and a job_id; you poll the jobs endpoint for the rows.

How many posts can one call return, and how do I page?

limit is 1 to 200 and defaults to 30. One call returns at most 200 rows, possibly fewer, and the full history is not guaranteed. There is no page parameter.

How much does it cost?

It costs $0.000556 per call, or $0.56 per 1,000 calls, billed per call and not per row. Async jobs are billed the same way. Failed calls and empty results are not charged.

Do I need an Instagram login?

No. You send one EveryInfra API key in the Authorization: Bearer header. No Instagram login or Instagram access token is needed.

What is the difference between user_posts and reels?

user_posts returns an account's posts as an async job. reels returns only the account's Reels, with play_count and duration_sec, in the same response.

You can call the other Instagram endpoints with the same key, such as the account's Reels or the posts that tag it.

Our own visit stats are always on. Google Analytics loads only if you choose “Allow analytics”. Privacy policy