Instagram Location Scraper - Posts by Place, Top and Recent avatar

Instagram Location Scraper - Posts by Place, Top and Recent

Pricing

from $0.40 / 1,000 result returneds

Go to Apify Store
Instagram Location Scraper - Posts by Place, Top and Recent

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

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

0

Monthly active users

2 days ago

Last modified

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.

InputLocation IDs, or /explore/locations/ URLs
OutputOne row per post
Ceiling2,000 posts per run
Account neededNone 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
}
FieldDefaultWhat it is
locationIdsnoneThe number out of /explore/locations/<id>/. Numeric ids only.
startUrlsnoneOr paste the /explore/locations/… URLs. Either works, and you can mix them.
resultsLimit50Posts for the whole run, not per place, 1 to 2,000. This is also your spend cap.
sessionCookiesnoneOptional. Your own Instagram sessionid, if you would rather the run read through your account.
proxyConfigurationApify defaultLeave it alone. Put servers of your own in proxyUrls inside it if you have them.
notionConnector, notionParentIdnoneOptional. 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"
}
FieldWhat it is
typeimage, video or carousel.
locationIdWhich of your places produced this row.
shortCodeUnique per post. Use it as your dedupe key across runs.
imagesEvery frame of a carousel, largest version. A single photo gives you one entry.
hashtags, mentionsParsed out of the caption for you, without the # or @.
videoViewCount, videoUrlnull on stills, as above.
displayUrl, imagesSigned 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.

RowHow to spot itBilled
A postok: true and a shortCodeyes
A diagnosticok: false and a codeno

Filter on ok == true and you have your posts.

CodeWhat it means
NO_RESULTSThe place resolved and both tabs came back empty. New or very quiet places do this.
BLOCKEDThe 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

  1. Open the place on Instagram and copy the number out of instagram.com/explore/locations/<id>/.
  2. Open Instagram Location Scraper and click Try for free.
  3. Paste the number into Location IDs, or the whole URL into Location URLs.
  4. Set Max posts. Start at 20 while you look at the output shape.
  5. 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.
  • resultsLimit is 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 wantUse
Posts tagged at a placeThis one
Posts under a hashtagInstagram Hashtag Scraper
Everything one profile has postedInstagram Profile Scraper
One post or reel you have the link forInstagram Post Scraper
Comments under a postInstagram 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.