# 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.

Canonical: https://fetchfox.net/docs/instagram-posts-api

## Request

GET /instagram/channel-posts (query parameters) or POST /instagram/channel-posts (JSON). Authenticate with x-access-key. Keep keys server-side.

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

### 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

```
// 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

```
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'])
```

## 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.

## Related pages

- https://fetchfox.net/docs/instagram-reels-api

- https://fetchfox.net/docs/instagram-post-stats-api

- https://fetchfox.net/guides/instagram-creator-research

