FetchFox
Get started

Instagram profile posts API

Read recent public posts from a known Instagram profile feed for content research or a bounded monitoring job. Choose a small result limit before collecting a larger dataset.

Make a request

GET /instagram/channel-posts accepts query parameters. POST /instagram/channel-posts accepts the same inputs as JSON. Send your project key in the x-access-key header; keep it on your server.

Credits: 1 credit per 20 returned items, minimum 1. Your available balance must cover the requested limit before processing.

curl request example
curl
curl --fail-with-body --get 'https://api.fetchfox.net/instagram/channel-posts' \
  -H 'x-access-key: YOUR_KEY' \
  --data-urlencode 'url=https://www.instagram.com/example_creator/' \
  --data-urlencode 'limit=20'
JavaScript request example
JavaScript
// Run on your server with FETCHFOX_API_KEY set.
const url = new URL('https://api.fetchfox.net/instagram/channel-posts');
url.searchParams.set('url', 'https://www.instagram.com/example_creator/');
url.searchParams.set('limit', '20');
const response = await fetch(url, {
  headers: { 'x-access-key': process.env.FETCHFOX_API_KEY },
  signal: AbortSignal.timeout(130000)
});
if (!response.ok) throw new Error('HTTP ' + response.status);
const result = await response.json();
if (!result.success) throw new Error('Request unsuccessful');
console.log(result.data);
Python request example
Python
import json, os
from urllib.parse import urlencode
from urllib.request import Request, urlopen

query = urlencode({"url":"https://www.instagram.com/example_creator/","limit":20})
request = Request('https://api.fetchfox.net/instagram/channel-posts?' + query,
    headers={'x-access-key': os.environ['FETCHFOX_API_KEY']})
with urlopen(request, timeout=130) as response:
    result = json.load(response)
if not result.get('success'):
    raise RuntimeError('Request unsuccessful')
print(result['data'])

Replace placeholder source IDs with real public URLs. See limits and retries before automating calls.

Choose a bounded result limit

The required url is an Instagram profile URL. Optional limit requests the maximum number of results, not a guaranteed number. Access restrictions or fewer source posts can produce a smaller result set.

This operation does not accept a cursor input. Do not build a loop that assumes each repeated request advances to another page. It is a recent-feed snapshot, not a complete historical archive.

Compare content without double counting

Unavailable views, plays and duration are null. A source-reported zero count remains zero; do not treat null as a measured value.

Persist each item’s returned identifier or canonical URL with your retrieval time. Deduplicate across scheduled runs before calculating posting frequency. Preserve a separate observation record if you need to track metric changes for the same post.

Choose posts or reels

Use this endpoint for the profile feed. Use the separate reels endpoint for the profile’s reels tab. For a deeper read of one known post, use the post metrics endpoint; neither list operation exports comment text.

Continue building