Instagram Location Scraper · Stats & Tagged Posts · No Login avatar

Instagram Location Scraper · Stats & Tagged Posts · No Login

Pricing

from $0.70 / 1,000 posts

Go to Apify Store
Instagram Location Scraper · Stats & Tagged Posts · No Login

Instagram Location Scraper · Stats & Tagged Posts · No Login

Scrape any Instagram location by place name, ID, or URL. Get the place card — phone, website, category, address, coordinates, opening hours — plus top and recent posts tagged there with captions, likes, comments, play counts and creator handles. No login. JSON, CSV, Excel.

Pricing

from $0.70 / 1,000 posts

Rating

5.0

(1)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Instagram Location Scraper

Instagram Location Scraper

Turn any Instagram place into structured data — the place card and the posts tagged at it. Paste a name like Eiffel Tower, a business plus its city, a numeric location ID, or an explore URL, and get phone, website, category, address, coordinates and opening hours, plus the top and recent posts tagged there — no login, no cookies, no account risk.


Why Use This Scraper?

  • The place card and its post feeds in one run — most location tools make you run two separate scrapers
  • Real contact data Instagram publishes about a place: phone number, website, category, street address, zip, opening hours per day
  • Top posts (Instagram's ranked best) and recent posts, each row tagged with which feed it came from
  • Sweep a whole chain from one line of input — "Starbucks Seattle" with a location cap of 20 returns 20 separate stores, each with its own phone and website
  • Automatic deduplication — Instagram serves overlapping pages, this actor does not bill you twice for the same post
  • Flattened rows that drop straight into CSV, Excel, or a spreadsheet
  • No login, no cookies, no session tokens — nothing to get your account flagged

Overview

The Instagram Location Scraper is built for local-lead prospectors, tourism and hospitality analysts, brand teams tracking venue mentions, and researchers who need geotagged post data.

It produces two row shapes in one dataset, each labelled by its resultsType:

  • details — one row per resolved place: the business-card data Instagram holds about it.
  • top / recent — one row per post tagged at that place, carrying its engagement counts and creator.

Every row carries the query you typed and the locationId it resolved to, so a run over fifty place names stays filterable and pivotable by input.


Supported Inputs

Input types

InputExampleWhat happens
Place nameEiffel TowerResolved through Instagram's own place search, best match first
Business + cityBlue Bottle Coffee OaklandSame, narrowed by the city term
Numeric location ID103912118089363Used directly, no search request spent
Explore URLhttps://www.instagram.com/explore/locations/103912118089363/ID extracted from the URL

Copy-pasteable input

{
"locations": [
"Eiffel Tower",
"Blue Bottle Coffee Oakland",
"103912118089363",
"https://www.instagram.com/explore/locations/213385402/"
],
"resultsType": "all",
"maxLocationsPerQuery": 1,
"maxPostsPerLocation": 50
}

Unsupported inputs

  • Latitude/longitude pairs — Instagram's place search takes names, not coordinates
  • Google Maps or Foursquare place IDs — Instagram uses its own location IDs
  • Private or restricted places whose feeds Instagram does not serve publicly

Use Cases

Local lead generation. Search a category plus a city, raise maxLocationsPerQuery, and take the details rows: name, category, phone, website, street address and opening hours for every matching venue.

Tourism and destination analytics. Track what visitors post at a landmark — volume, captions, engagement, and which creators are driving reach.

Hospitality and venue monitoring. Watch the recent feed of your own restaurant, hotel or store for customer photos, complaints and user-generated content worth resharing.

Chain and competitor sweeps. One query per brand, maxLocationsPerQuery at 20–50, returns every branch Instagram knows about with its own contact card.

Influencer discovery by place. The top feed of a venue surfaces the creators whose posts about it performed best.


How It Works

How the Instagram Location Scraper works

  1. Each input line is classified: a numeric ID or explore URL goes straight through; anything else is a name.
  2. Names are resolved through Instagram's place search. maxLocationsPerQuery decides how many matches are taken (1 = best match only).
  3. For each resolved place, the location record is fetched — name, category, phone, website, address, zip, opening hours — and emitted as the details row. Coordinates come from the search hit, which is the only place Instagram exposes them.
  4. The top and recent feeds are paged through, deduplicated by post ID across both feeds, and emitted as top / recent rows.
  5. Paging stops when a full page returns nothing new, when your cap is reached, or when Instagram stops serving the feed.

Input Configuration

FieldTypeDefaultDescription
locationsarrayPlace names, numeric IDs, or explore URLs. Required.
resultsTypeselectallall, details, top, or recent.
maxLocationsPerQueryinteger1Matches to take per name. Ignored for IDs and URLs.
maxPostsPerLocationintegerunlimitedCap on posts per location. Split evenly across the selected feeds.
onlyVideosbooleanfalseReturn only videos and reels, skipping photo posts.

Example — contact data only, chain sweep

{
"locations": ["Blue Bottle Coffee"],
"resultsType": "details",
"maxLocationsPerQuery": 30
}

Example — recent user-generated content at one venue

{
"locations": ["https://www.instagram.com/explore/locations/103912118089363/"],
"resultsType": "recent",
"maxPostsPerLocation": 200,
"onlyVideos": false
}

Output Overview

One details row per resolved place, plus one row per post tagged at it. Every row identifies the query it came from, the locationId it resolved to, and its resultsType.

Places that could not be resolved are returned as error rows carrying query, error, and message — these are never charged.


Output Samples

Real details row, produced from locations: ["Eiffel Tower"]:

{
"query": "Eiffel Tower",
"resultsType": "details",
"locationId": "103912118089363",
"name": "Eiffel Tower, Paris, France",
"category": "Monument",
"phone": "+33 892 70 12 39",
"website": "https://www.toureiffel.paris/fr",
"address": "Champ-de-Mars",
"city": null,
"zip": "75007",
"latitude": 48.85824768693,
"longitude": 2.2944650859978,
"hoursStatus": "Open until 12:00 AM",
"hoursToday": "12:00 AM",
"isOpenNow": true,
"hoursSchedule": [
{ "day": "Monday", "hours": ["9:00 AM - 12:00 AM"] },
{ "day": "Tuesday", "hours": ["9:00 AM - 12:00 AM"] }
],
"locationUrl": "https://www.instagram.com/explore/locations/103912118089363/"
}

Real post row from the same run (CDN URLs shortened):

{
"query": "Eiffel Tower",
"resultsType": "top",
"locationId": "103912118089363",
"locationName": "Eiffel Tower, Paris, France",
"postId": "3967420748134994528",
"shortCode": "DcPHCZvGdJg",
"postUrl": "https://www.instagram.com/p/DcPHCZvGdJg/",
"mediaType": "carousel",
"productType": "carousel_container",
"takenAt": "2026-08-19T21:03:50Z",
"caption": "🇫🇷♥️💍",
"likeCount": 116310,
"commentCount": 726,
"playCount": null,
"videoDuration": null,
"isPaidPartnership": false,
"ownerUsername": "carolmourah",
"ownerFullName": "Carol Moura",
"ownerId": "5770756794",
"ownerProfilePicUrl": "https://scontent-iev1-1.cdninstagram.com/v/t51.82787-19/...",
"thumbnailUrl": "https://scontent-iev1-1.cdninstagram.com/v/t51.82787-15/...",
"videoUrl": null,
"taggedUsernames": ["_cldo12"]
}

Error row for a name that matches nothing:

{
"query": "asdkjhasdkjhasd",
"error": "location_not_found",
"message": "No Instagram place matched \"asdkjhasdkjhasd\"."
}

Key Output Fields

Source query, resultsType, locationId

Place card (details rows) name, category, phone, website, address, city, zip, latitude, longitude, hoursStatus, hoursToday, isOpenNow, hoursSchedule, locationUrl

Post identity (top / recent rows) postId, shortCode, postUrl, mediaType, productType, takenAt

Content caption, taggedUsernames, locationName, isPaidPartnership

Engagement likeCount, commentCount, playCount

Media thumbnailUrl, videoUrl, videoDuration

Creator ownerUsername, ownerFullName, ownerId, ownerProfilePicUrl


FAQ

Can I search by coordinates instead of a name? No. Instagram's public place index takes text queries. Search the venue by name plus city, then use the returned locationId for repeat runs.

Why is city sometimes empty when address is filled? Instagram stores these as free-text fields supplied by the place owner, and many places fill one but not the other. The address and zip are usually the reliable pair.

Why are latitude and longitude null on some rows? Coordinates are carried on the place-search result, not on the location record itself. If you pass a numeric location ID directly, no search happens, so no coordinates are available — pass the place name instead if you need them.

How many posts can I get per location? Instagram's location feeds are live sets of limited depth, not full archives. Expect a few hundred posts for a busy place. Setting maxPostsPerLocation to 10,000 will not produce 10,000 rows — paging stops once the feed stops returning new posts.

Does a post appearing in both Top and Recent get charged twice? No. Posts are deduplicated by ID across both feeds before billing, so each post is delivered and charged once per location.

Why does a chain sweep return a place that is not part of the chain? The matches come from Instagram's own place search, which is fuzzy — a sweep for "Blue Bottle Coffee" returned four genuine Blue Bottle cafés and one unrelated venue whose name shares a word. Filter the details rows on name or category after the run; every row carries both.

How do I get every branch of a chain? Put the brand name in locations and raise maxLocationsPerQuery. Adding a city ("Starbucks Seattle") narrows the matches; leaving it off returns whatever Instagram ranks highest globally.


Support

Found a bug or need a field that is not there? Open an issue on the actor's Issues tab and it will be looked at.

Email: muhamed.didovic@gmail.com


Additional Services

Need a custom scraper, a tailored export format, or an integration into your own pipeline? Custom builds are available — get in touch at muhamed.didovic@gmail.com.


Explore More Scrapers

  • Instagram Hashtag Scraper — top posts and reels from any public hashtag
  • Instagram Profile Scraper — profiles, posts and comments from any public account
  • Instagram Stories & Highlights Scraper — active stories and permanent highlights
  • Instagram Followers & Following Scraper — full follower and following lists
  • Instagram Post Likers Scraper — who liked any public post or reel
  • Instagram Comments Scraper — full comment threads with replies
  • Instagram Reels Search & Viral Finder — find trending reels by keyword

Browse the full collection at apify.com/memo23.


🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/instagram-location-scraper).

Purpose: Resolves Instagram places by name or ID and returns the location's contact card plus the top and recent posts tagged there.

Minimal input:

{ "locations": ["Eiffel Tower"], "resultsType": "all", "maxPostsPerLocation": 20 }

Output: two row shapes in one dataset, distinguished by resultsType. details rows carry name, category, phone, website, address, city, zip, latitude, longitude, hoursStatus, hoursToday, isOpenNow, hoursSchedule, locationUrl. top/recent rows carry postId, shortCode, postUrl, mediaType, productType, takenAt, caption, likeCount, commentCount, playCount, videoDuration, isPaidPartnership, ownerUsername, ownerFullName, ownerId, ownerProfilePicUrl, thumbnailUrl, videoUrl, taggedUsernames. Unresolvable inputs return {query, error, message} instead.

Behaviors an agent should know:

  • Always set maxPostsPerLocation. Uncapped runs page until Instagram stops returning new posts.
  • resultsType: "details" spends no post requests — use it when only contact data is needed.
  • A name input costs one extra search request; a numeric location ID does not.
  • maxLocationsPerQuery only applies to name inputs; IDs and URLs resolve to exactly one place.
  • With resultsType: "all" the post cap is split evenly between the top and recent feeds.
  • Billing: one location event per details row, one post event per post row. Error rows are never charged, and posts are deduplicated across feeds before billing.
  • No login is used, so no authenticated-only fields are available.

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available Instagram location pages — no authenticated endpoints, paid features, or content behind the instagram.com login wall. Users are responsible for ensuring their use complies with instagram.com's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.


SEO Keywords

instagram location scraper, scrape instagram location, instagram place scraper, instagram geotag scraper, instagram location API, instagram location posts, instagram location stats, location based instagram data, instagram business phone scraper, local lead generation instagram, geotagged posts scraper, instagram venue data, instagram place search, tourism analytics instagram, hospitality social monitoring, user generated content by location, instagram.com scraper, Apify instagram, no login instagram scraper