Instagram Location Scraper - Posts by Place, Top and Recent
Pricing
from $0.40 / 1,000 result returneds
Instagram Location Scraper - Posts by Place, Top and Recent
Scrape Instagram posts by location ID or place URL. A place page has two feeds, Top and Recent, and they hold different posts. You get both. Each row has the caption, likes, comments, media URLs, owner, timestamp and location. No login, no cookie. $0.40 per 1,000 posts.
Pricing
from $0.40 / 1,000 result returneds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
5
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Location Scraper: posts tagged at a place, by location ID
Give it an Instagram place id and get the posts tagged there as rows. Caption, like and comment counts, image and video links, the owner, the timestamp, and the place id each row came from. A place page has a Top feed and a Recent feed holding different posts, and you get both.
Two things to know before you start. You need the numeric place id, the number in
/explore/locations/<id>/, because there is no place search here. And a place feed is a sample, not
an archive: about 70 posts per place is what the public tabs hand over, whatever you set the limit
to.
| Input | Location IDs, or /explore/locations/ URLs |
| Output | One row per post |
| Ceiling | 2,000 posts per run |
| Account needed | None from you |
| Price | $0.40 per 1,000 posts, flat on every plan |
🔍 What Instagram Location Scraper does
You give it places, it returns what people tagged there. Photos, videos and carousels all come back
in the same row shape, so you can drop the lot into a sheet without branching on type. Every row
carries the locationId it came from, which keeps a multi-place run separable.
Nothing to log into. No cookie, no app review, no business API approval.
Finding the id takes ten seconds. Open the place on Instagram, look at the address bar, and take
the number out of instagram.com/explore/locations/212988663/. Paste either the number or the whole
URL, and you can mix the two in one run.
If you do have an Instagram cookie and would rather the run read through your own account, put it in
sessionCookies. Most people never need to.
📥 What you give it
{"locationIds": ["212988663"],"resultsLimit": 50}
| Field | Default | What it is |
|---|---|---|
locationIds | none | The number out of /explore/locations/<id>/. Numeric ids only. |
startUrls | none | Or paste the /explore/locations/… URLs. Either works, and you can mix them. |
resultsLimit | 50 | Posts for the whole run, not per place, 1 to 2,000. This is also your spend cap. |
sessionCookies | none | Optional. Your own Instagram sessionid, if you would rather the run read through your account. |
proxyConfiguration | Apify default | Leave it alone. Put servers of your own in proxyUrls inside it if you have them. |
notionConnector, notionParentId | none | Optional. Write each post into a Notion data source as well as the dataset. |
Give it at least one place. A run with nothing in either field fails rather than returning an empty dataset. An entry that is not a number is dropped, so check your list if a place you expected is missing.
When you name several places, the run fills them in order until resultsLimit is spent. Put the one
you care about most first.
📤 What you get back
A real row from a recent run, with the caption cut short and the long image links trimmed:
{"ok": true,"type": "carousel","shortCode": "DdfxNBIjQer","url": "https://www.instagram.com/p/DdfxNBIjQer/","caption": "If you haven’t seen Garry Starr in “Classic Penguins” drop everything and get tickets for the performance at the Second Stage theater in Manhattan. ...","hashtags": [],"mentions": [],"likesCount": 1,"commentsCount": 0,"videoViewCount": null,"displayUrl": "https://scontent-dfw5-1.cdninstagram.com/v/t39.30808-6/...","videoUrl": null,"images": ["https://scontent-dfw5-1.cdninstagram.com/v/t39.30808-6/...","https://scontent-dfw5-2.cdninstagram.com/v/t39.30808-6/..."],"isVideo": false,"dimensions": {"height": 2048, "width": 1536},"ownerUsername": "carballodieguez","ownerId": "199258671","timestamp": "2026-09-20T04:51:32.000Z","accessibilityCaption": null,"locationId": "212988663"}
| Field | What it is |
|---|---|
type | image, video or carousel. |
locationId | Which of your places produced this row. |
shortCode | Unique per post. Use it as your dedupe key across runs. |
images | Every frame of a carousel, largest version. A single photo gives you one entry. |
hashtags, mentions | Parsed out of the caption for you, without the # or @. |
videoViewCount, videoUrl | null on stills, as above. |
displayUrl, images | Signed links that expire within hours. Download what you want to keep. |
Anything Instagram did not supply comes back null, as accessibilityCaption does above. Nothing is
guessed or padded.
🧾 Reading the output
Two kinds of row land in your dataset, and only the first kind is billed.
| Row | How to spot it | Billed |
|---|---|---|
| A post | ok: true and a shortCode | yes |
| A diagnostic | ok: false and a code | no |
Filter on ok == true and you have your posts.
| Code | What it means |
|---|---|
NO_RESULTS | The place resolved and both tabs came back empty. New or very quiet places do this. |
BLOCKED | The place could not be read this time. If you supplied a cookie, check it is still valid. |
A diagnostic row does not fail the run and is never billed as a post. Empty input is the one case that does end the run, and it ends it straight away rather than after any work.
▶️ How to run it
- Open the place on Instagram and copy the number out of
instagram.com/explore/locations/<id>/. - Open Instagram Location Scraper and click Try for free.
- Paste the number into Location IDs, or the whole URL into Location URLs.
- Set Max posts. Start at 20 while you look at the output shape.
- Click Start, then download the dataset as JSON, CSV or Excel.
💰 How much does it cost?
$0.40 per 1,000 posts. Flat on every Apify plan, no volume tiers.
You pay per post delivered. A place that returns nothing is not billed for results, and diagnostic rows are not billed either.
💡 What people use it for
- Seeing what guests actually photograph at a venue before writing the brief for a shoot there.
- Finding local creators who post at a place regularly, then approaching them directly.
- Checking what a neighbourhood, festival or stadium looks like through its visitors' cameras.
- Collecting tagged posts around an event as a record, since place feeds move on quickly.
🚧 What it does not do
- No place search. You bring the numeric id. There is no lookup from a place name here.
- About 70 posts per place is what the public tabs hand over. Setting the limit higher does not reach further in.
- A place feed is a sample. Instagram decides what sits in Top and Recent, so you get a slice rather than everything ever tagged there.
resultsLimitis for the whole run, not per place, so several places share it.- A non-numeric entry is dropped without a row of its own.
- No private accounts, and no stories or highlights.
- Media links expire within hours. Download what you want to keep.
- An empty run fails rather than returning an empty dataset. Give it at least one place.
🧭 Which Instagram scraper do you need?
| If you want | Use |
|---|---|
| Posts tagged at a place | This one |
| Posts under a hashtag | Instagram Hashtag Scraper |
| Everything one profile has posted | Instagram Profile Scraper |
| One post or reel you have the link for | Instagram Post Scraper |
| Comments under a post | Instagram Comments Scraper |
❓ Questions people ask
Where do I find the location ID? In the address bar. Open the place on Instagram and take the
number out of /explore/locations/<id>/.
Can I search for a place by name? Not here. This takes ids and URLs.
Do I need an Instagram account? No. The cookie field is optional.
Why did I get fewer posts than I asked for? Because the place had fewer available. The public tabs hold roughly 70 posts per place, and you are only billed for what arrived.
Is resultsLimit per place or per run? Per run. Ask for 100 across three places and you get 100
posts in total, not 300.
Is scraping Instagram legal? This reads public posts only, never private accounts or messages. Results can still contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the location ID you used and the run ID. The code on the diagnostic row usually explains it on its own.