Instagram Post Details Scraper
Pricing
from $0.95 / 1,000 item processeds
Instagram Post Details Scraper
Extract public Instagram post captions, authors, timestamps, media URLs, and visible engagement metrics from direct post URLs.
Pricing
from $0.95 / 1,000 item processeds
Rating
0.0
(0)
Developer
Fetch Cat
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
Extract Instagram post details from direct public /p/{shortcode}/ URLs: captions, author metadata, dates, visible like/comment counts, and optional media links. Export the dataset as JSON, CSV, or Excel, or retrieve it through the API. Private and login-only content is not supported, and public fields may be unavailable.
Quick start
- Paste one or more public post URLs into Post URLs.
- Set Maximum URLs to process to a small number for your first run.
- Start the Actor, then inspect the dataset and download the results.
{"startUrls": [{ "url": "https://www.instagram.com/p/DWZitMjgHp1/" }],"maxItems": 1,"includeMediaUrls": true}
This is an input recipe, not a guarantee that the example post remains publicly accessible. No Instagram account, cookies, or login tokens are accepted.
Prefer a video guide? This short Apify walkthrough shows you how to set up and run an Actor. It uses a different Actor, but the setup steps are the same.
What you get
Public metadata for admitted direct post URLs, with success, error or duplicate outcomes. Successful rows can include captions, author hints, date-level timestamps, visible counts and optional media links. Missing fields are not zero values, media links are not downloads, and author metadata is not a verified profile lookup.
Who is it for?
- Campaign analysts reviewing metadata for a known list of public post links.
- Content researchers joining available captions and source fields to their own URL inventory.
- Social-reporting teams preserving observed counts with their collection context.
- Automation developers routing successful, duplicate and failed inputs to separate downstream steps.
How you can use the data
- Inspect one known campaign post. Use the supplied DWZitMjgHp1 URL with a one-input cap and media links enabled. Keep inputUrl, shortcode and available caption, author and counts together, leaving missing fields unknown rather than assuming every public post exposes them.
- Choose metadata-only output deliberately. Use the same direct post input with media URLs disabled. This omits media-link fields rather than downloading files in either mode. It does not produce full carousel contents or view counts.
- Reconcile your admitted URL list. Retain per-input status, error fields and duplicateOf. The input cap counts the first entries, including invalid and duplicate ones, and repeated shortcodes create diagnostics rather than repeated successful post rows.
- Prepare your own caption or engagement review. Keep available caption-derived tags, date-level timestamps, rounded visible counts and collection times. Author fields are public metadata hints, and missingFields checks selected fields rather than every possible omission. Review RUN_SUMMARY and RUN_CHECKPOINT for remaining inputs before assuming complete coverage.
Input settings
Use the quick-start input to request public media links. For a metadata-only export, use the same input with includeMediaUrls: false. This omits media URL fields. It does not download media files in either mode.
The Actor processes the admitted list in input order. It does not discover posts from profiles, search by keyword, or sort records by engagement.
More input configuration
| Setting | JSON key | Meaning |
|---|---|---|
| Post URLs | startUrls | Required nonempty list of direct public post URLs. At most 1,000 inputs. |
| Maximum URLs to process | maxItems | Process the first N entries. Form default: 3. When omitted in API input, the supplied list length is used. |
| Include media URLs | includeMediaUrls | Include available image/video links. Default true. |
| Proxy configuration | proxyConfiguration | Optional configured fallback, disabled by default. See field help for supported settings and costs. |
Example inputs
Use the Quick start input as a small first run. Adjust the fields described above for your own data.
Output data
Each input can produce a success, error, or duplicate row. Optional values may be absent. Absence is not a zero count. The following is a synthetic shape-only example, not an observed Instagram record:
{"inputUrl": "https://www.instagram.com/p/EXAMPLE/","status": "success","shortCode": "EXAMPLE","url": "https://www.instagram.com/p/EXAMPLE/","type": "post","caption": "Example caption #example","hashtags": ["example"],"mentions": [],"isVideo": false,"isCarousel": false,"missingFields": ["postId", "ownerUsername", "timestamp", "likesCount", "commentsCount", "displayUrl"],"scrapedAt": "2026-10-25T00:00:00.000Z"}
| Fields | Meaning |
|---|---|
inputUrl, url, shortCode | Original URL, normalized URL, and post shortcode. |
status, errorType, errorMessage, duplicateOf | Per-input outcome and available failure/duplicate details. Unavailability does not establish that a post is private or deleted. |
postId, ownerId | Public identifiers when exposed. |
ownerUsername, ownerFullName, ownerProfileUrl | Author information inferred from public metadata, not a verified profile lookup. |
caption, hashtags, mentions | Available caption and unique tags/usernames derived from it. |
timestamp, scrapedAt | Available post date (date-level precision) and collection time. |
likesCount, commentsCount | Visible counts, which may be rounded or missing. No comment text is collected. |
type, isVideo, isCarousel | Media indicators. isVideo reflects video-link availability, not a complete media inventory. |
displayUrl, videoUrl, thumbnailUrl | Available media links when requested. Thumbnail and display may refer to the same image. |
missingFields | Availability checks for selected core fields, not every output field or every omitted media URL. |
sourceRoute, attempts | Retrieval diagnostics when present. |
viewsCount, mediaCount | Reserved fields, currently not populated. |
RUN_SUMMARY contains aggregate outcome and pending counts. RUN_CHECKPOINT tracks processed shortcodes and pending inputs. They are optional metadata records, not additional post datasets.
Download your results
Open your run's dataset, choose Export and select JSON, CSV or Excel. JSON keeps nested fields together. CSV and Excel are useful when you want to review the records in a spreadsheet.
See Apify's download and export guide for the available formats and field options.
Pricing
The start event is charged once after valid input is admitted, and item applies to each successfully saved post-detail row. Error and duplicate rows have no item charge. A start charge can still apply when no post is extracted.
Use a small admitted-input cap, counting invalid and duplicate entries as part of that list. See the Pricing tab for current rates and discounts.
Tips for best results
- Supply direct public post URLs. Profile crawling and keyword discovery are outside this Actor's scope, and supported URL shapes are described in the FAQ.
- Bound the admitted list rather than a promised success count. Invalid and duplicate inputs can use positions within that cap.
- Choose media links only when needed. The switch controls link fields and never downloads files.
- Keep missing-field and per-input outcome information. An absent value or failed lookup does not establish a private or deleted post.
- Check summary and checkpoint pending counts after a large list. Useful saved results can coexist with unfinished or failed inputs.
Limits and caveats
Only available public direct-post metadata is collected. There is no Instagram account, cookie or login-token input, private or login-only data, profile crawling, keyword discovery, comment-thread collection, liker/follower lists, direct messages or account analytics. The supported direct and legacy URL shapes remain documented in the FAQ.
Instagram can hide fields, challenge access or make public metadata unavailable. Changing connection settings does not unlock restricted content. Individual failures can coexist with useful records, while a completed run without any extracted posts currently fails even if diagnostics were saved. Error rows and summary reasons are observations rather than verified explanations of privacy or deletion.
Counts may be rounded or missing, and timestamps have date-level precision. View counts and full carousel inventories are not extracted. Media links can expire, and author information is inferred from exposed metadata rather than a verified profile lookup. Reserved fields remain unpopulated as listed in Output data.
The Actor processes the first admitted entries in input order and does not sort by engagement. Duplicate shortcodes create duplicate diagnostics. Large lists can stop before completion, with RUN_SUMMARY and RUN_CHECKPOINT tracking aggregate outcomes, processed shortcodes and pending inputs as optional metadata rather than separate post datasets.
Automation and integrations
Save your settings for next time
Once you have an input that works for you, save it as an Apify task. This keeps your settings together so you can use them again without filling in the form from scratch.
Run on a schedule
Need fresh results regularly? You can schedule the Actor or a saved task to run at a time that suits you.
Each scheduled run collects the data again. If you want to compare results or highlight changes, add that step in your own workflow.
Send results to your other tools
Use n8n, Make or Zapier to connect this scraper to the rest of your workflow. For example, you could pass its results to an AI assistant or add records to a spreadsheet. Follow the Apify integration guides for your chosen tool.
For a custom connection, an Apify webhook can notify your app when a run finishes or fails. Your app can then fetch the results or handle the failure.
API usage
Want to collect this data from your own app or automation? The examples below send input to the scraper and show how to collect its results.
The Node.js and Python examples wait for the run to finish before reading its results. The cURL example starts the run and returns its details. Wait for that run to finish, then use its defaultDatasetId to fetch the results.
For setup instructions, see Apify's JavaScript client guide, Python client guide and Actor runs API reference.
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~instagram-post-details-scraper/runs' \-H "Authorization: Bearer $APIFY_TOKEN" \-H 'Content-Type: application/json' \--data @- <<'JSON'{"startUrls": [{"url": "https://www.instagram.com/p/DWZitMjgHp1/"}],"maxItems": 1,"includeMediaUrls": true}JSON
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/instagram-post-details-scraper').call({"startUrls": [{"url": "https://www.instagram.com/p/DWZitMjgHp1/"}],"maxItems": 1,"includeMediaUrls": true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/instagram-post-details-scraper').call(run_input={'startUrls': [{'url': 'https://www.instagram.com/p/DWZitMjgHp1/'}], 'maxItems': 1, 'includeMediaUrls': True})print(client.dataset(run['defaultDatasetId']).list_items().items)
API usage notes
cURL (starts asynchronously. Use the returned defaultDatasetId to retrieve results after the run finishes):
MCP and AI agents
You can ask your AI assistant to collect data with Instagram Post Details Scraper and help you work with the results. The scraper returns the data, and your assistant can then summarize it, compare records or prepare notes.
Connect your assistant through the Apify MCP server. MCP gives your assistant a way to find this scraper, run it and read the results. Follow the official setup and sign-in guide for your app.
Easier setup with an Apify plugin
If you use a supported coding assistant, the official Apify plugin can set up the connection for you. It connects your assistant to Apify and includes instructions for common tasks. Follow the guide for your particular app.
Use Apify AI in Console
Prefer to keep everything in Apify? Open Apify AI in Console and ask it to find Fetch Cat's Instagram Post Details Scraper. You can describe the data you want and ask questions about the results.
Apify AI is currently in beta. It asks for confirmation before starting an Actor, and normal run charges apply.
Choose your assistant
- Claude and Claude Code (Anthropic): Apify setup guide.
- ChatGPT and Codex (OpenAI): Apify setup guides.
- Grok Bot (xAI): Apify plugin guide.
- Gemini CLI (Google): MCP server setup guide. Use the server URL below with the HTTP configuration supported by Gemini CLI.
Connect just this scraper
To keep your setup focused on this scraper, add this server configuration to a compatible MCP client:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=fetch_cat/instagram-post-details-scraper"}}}
Sign in to Apify when your client asks. If your client uses a Bearer token instead, follow its setup guide and keep the token in its secure configuration. Configuration formats vary by app, so use the linked guide if your client needs a different format.
Use Apify's general server
Already connected to the general Apify MCP server at https://mcp.apify.com? You can use it to find this scraper without adding another server. Ask your assistant to use Instagram Post Details Scraper by Fetch Cat, or give it the identifier fetch_cat/instagram-post-details-scraper.
Your assistant can check the available settings and retrieve the results from the returned run. If the run is still working, it should follow that run rather than start it again. Both connection options use Apify's hosted service.
Example requests
- “Use Fetch Cat’s Instagram Post Details Scraper to retrieve https://www.instagram.com/p/DWZitMjgHp1/ with a one-input cap and media links enabled. Show available caption, author hints and visible counts, leaving missing values unknown.”
- “Collect metadata for the same DWZitMjgHp1 public post with a one-input cap and media URLs off. Keep caption-derived hashtags, mentions and available date-level timestamp without downloading media or fetching comments.”
- “Retrieve the same known post with a one-input cap and media links enabled, then create a review table of its status, missing-field checks and source identity. Do not turn absent counts into zero or treat an error as proof of deletion.”
Normal Apify charges apply. Check the live Pricing tab before asking your assistant to run a larger batch.
Pay with x402
If your AI agent has a funded wallet, it can pay for Apify usage through x402. This experimental option lets an agent use Apify without a conventional account.
Apify AGI provides a prepaid API token with a spending cap after payment. Your agent can use that token to run this scraper through the Apify API or an authenticated MCP connection.
Some MCP setups also support paying for each request directly. That is a different payment option, so check the official guide for its availability.
Follow the official guide for wallet setup, supported payment options and current terms. Apify handles the payments. Keep wallet keys and payment tokens in your agent's secure configuration.
Other ways for agents to pay
Apify also supports MPP for prepaid access through AGI and Skyfire for eligible Actors. If your agent already uses one of these, see the agentic payment guide to choose the right setup.
FAQ
Can I get Instagram post details by link?
Yes: supply direct public /p/{shortcode}/ URLs. Bare shortcodes, profile URLs, and /reel/ URLs are not accepted by this Actor. The existing URL parser also accepts legacy /tv/ links, subject to public availability.
Can I copy a post description or caption?
The Actor extracts the caption when recognizable public metadata contains it. It cannot guarantee a caption for every publicly viewable post, and it does not fetch comment threads.
Is this an Instagram API alternative?
It provides public post metadata through the Apify API and MCP, but is not an official Instagram API or affiliated with Instagram. It does not provide account analytics or authenticated/private data.
Why are fields empty, or why did my run fail?
Fields may be unavailable in public metadata. Check status, errorType, and missingFields. These describe the observed result, not a verified reason for Instagram's access decision. A run with no successful extraction fails even when it saved diagnostics.
How do I export results and check pricing?
Download the dataset as JSON, CSV, or Excel, or use the API examples above. The start and successful-row events are described under Pricing and limits. Current amounts are on the Pricing tab.
Related Actors
- Instagram Profile Posts Scraper — collect public profile details and available post or Reel metadata from known accounts or media URLs.
- Instagram Reel Scraper — collect available public video metadata from known Reel URLs.
- Instagram Comments Scraper — comment-focused extraction.
- Instagram Hashtag Scraper — collect visible public hashtag-post records and available engagement fields.
- Instagram Related Profiles Scraper — related-profile discovery.
Support and feedback
For custom additions or integrations, email hello@fetchcat.dev.
Found an error or have a feature request? Open an issue with the run URL, a non-sensitive input example and what you expected.
Need help sharing it? See Apify’s guide to sharing a run when reporting an issue. Sharing a run can give the developer access to its input, logs and results, so use a run that contains no sensitive data. Please leave out API tokens, passwords, cookies, private documents and personal data. Use a public sample URL or a redacted example instead.
Tried this scraper? We'd love to hear how it worked for you. Leave a review to help others choose the right tool and help us improve it. Your feedback means a lot to us.
Made with care for curious people, AI agents and the possibilities in data. ♥