Instagram, locations
Instagram posts tagged at a location
Give it an Instagram location page and it returns the top and most recent public posts tagged there, typically about 70, each with likes, comments, caption, media and the poster's follower count. Add includeDetails for a row describing the place itself. $1.90 per 1,000 results.
- $1.90 per 1,000 results
- About 70 posts per location
- Place details row
- No login
Finding a location link
Open any post tagged at the place and tap the location name above the photo. The page that opens has a link like https://www.instagram.com/explore/locations/213131048/, sometimes followed by a name. Paste one or many into Start URLs. Searching for places by name is login-only on Instagram, so the Actor needs the links. A tip: every post you scrape carries a location object with the place's id, so one run over a few local accounts gives you a list of nearby places to feed into the next.
What you get
Posts. Each post tagged at the place comes as a normal post row: caption, hashtags, mentions, likes, comments, media URLs, createdAt, the owner's follower count and engagementRate. Every row has a location object with the place's id, name, slug, lat and lng.
Place row. With includeDetails turned on, you also get one row per location with its category, coordinates, address, price range, opening status, the place's own Instagram account and its post count.
Who uses location data
- Local businesses. See what customers post from your venue and from the competitors down the street: which dishes, which angles, which times.
- Hospitality and tourism. Track what gets photographed at hotels, attractions and neighbourhoods, and who is posting it.
- Events. Collect posts from a venue during a festival or launch, then again a week later.
- Local agencies. Find active venues and the local creators who post from them, as a starting point for outreach.
- Research. Compare activity across a set of places using the coordinates in each row.
The 70-post ceiling, and how to work with it
For each location, Instagram shows logged-out visitors one page of top posts and one page of recent posts. Going further needs a login, so the Actor stops there instead of pretending otherwise. That's typically about 70 posts per location per run.
To build depth over time, schedule the run daily or weekly with until set to the same period (for example 7 days) and keep the results. Each run adds the newest posts, and within a few weeks you have a steady record of activity at the place. Adding nearby locations to the same run widens the net.
Costs
- One location with its place row: about 71 results, roughly $0.13.
- 50 locations with place rows: about 3,550 results, roughly $6.75.
- A daily monitor of 10 venues with
until: "1 day"bills only the new posts each day.
Limits
- About 70 posts per location per run: top plus most recent.
- No search by place name; bring location links or IDs.
- Only public posts. Posts from private accounts are never visible to visitors.
Run it from code
One location with its place row, 100 results at most: $0.19 or less.
// Save as run.mjs, then: npm i apify-client && APIFY_TOKEN=... node run.mjs
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yugenox/instagram-scraper').call({
startUrls: [
"https://www.instagram.com/explore/locations/213131048/"
],
includeDetails: true,
maxItems: 100
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) console.log(item.dataType, item.url, item.createdAt);import os
from apify_client import ApifyClient # pip install apify-client
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yugenox/instagram-scraper").call(run_input={
"startUrls": ["https://www.instagram.com/explore/locations/213131048/"],
"includeDetails": True,
"maxItems": 100,
})
if run is None:
raise RuntimeError("Run did not finish")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item.get("dataType"), item.get("url"), item.get("createdAt"))# Small jobs: runs the Actor and returns the rows in one call (up to 5 minutes).
curl -X POST "https://api.apify.com/v2/acts/yugenox~instagram-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls":["https://www.instagram.com/explore/locations/213131048/"],"includeDetails":true,"maxItems":100}'Questions people ask
Why only about 70 posts per location?
Instagram shows logged-out visitors one page of top posts and one page of recent posts per place. Schedule runs with until to collect new posts over time.
Can I search for a location by name?
Not in this Actor, because place search is login-only on Instagram. Paste location links, or use the location ids found on posts you already scraped.
Does it include coordinates and addresses?
Yes. Every post has the place's lat and lng in its location object, and the place row (includeDetails) adds address, category, price range and opening status.
Can I get posts from a date range?
You can set a start with until (a date or a period like "30 days"). Anything newer that Instagram shows is included.
Do I need an Instagram login?
No. Location pages are read as a logged-out visitor.
Run it on your own data
Open the Actor on Apify, paste your input and press Start. You pay per result from your own Apify account, with no subscription to us. Or connect it to your AI assistant and ask in plain English.
Last updated 2026-09-26.