# Instagram Location Posts & Local Creator Finder (`scraping_solutions/instagram-location-posts-local-creator-finder`) Actor

Find Instagram places by name, URL, ID, or GPS coordinates. Export geo-tagged posts, engagement metrics, media, and local creators without cookies.

- **URL**: https://apify.com/scraping\_solutions/instagram-location-posts-local-creator-finder.md
- **Developed by:** [Scraping Solutions](https://apify.com/scraping_solutions) (community)
- **Categories:**
- **Stats:** 7 total users, 7 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.10 / 1,000 instagram location posts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Instagram Location Posts & Local Creator Finder

Find Instagram places by **name, URL, numeric ID, or GPS coordinates**, then export their public geo-tagged posts without Instagram cookies or login credentials.

The Actor resolves ambiguous place searches, paginates automatically, applies filters before saving results, removes duplicates, and returns clean rows ready for Excel, Google Sheets, databases, maps, CRM enrichment, and AI workflows.

### What you can do

- Monitor posts from stores, hotels, restaurants, venues, events, landmarks, and neighborhoods.
- Discover creators who publish at specific places.
- Compare content and engagement across multiple locations.
- Track user-generated content around a business or campaign.
- Filter by date, media type, likes, comments, plays, and verified creators.
- Run scheduled monitoring without downloading the same post twice inside a run.

### Input

Use names, IDs, and URLs together:

```json
{
  "locations": [
    "Mall del Sol Guayaquil",
    "51492242",
    "https://www.instagram.com/explore/locations/213131048/berlin-germany/"
  ],
  "coordinates": ["-2.1552,-79.8916"],
  "resultsPerLocation": 100,
  "matchStrategy": "best",
  "maximumLocationsPerQuery": 1,
  "maximumPagesPerLocation": 10,
  "onlyPostsNewerThan": "2026-07-01",
  "minimumLikes": 0,
  "minimumComments": 0,
  "minimumPlays": 0,
  "includeImages": true,
  "includeReels": true,
  "includeCarousels": true,
  "verifiedCreatorsOnly": false,
  "includeLocationInfo": true,
  "maxConcurrency": 3
}
```

#### Matching strategies

- `best`: selects the strongest name, city, and address match.
- `exact`: processes only exact place-name matches.
- `all`: processes up to `maximumLocationsPerQuery` candidates.

IDs and Instagram location URLs skip search and go directly to extraction.

### Output

Every dataset row represents one saved Instagram post:

```json
{
  "input": "Mall del Sol Guayaquil",
  "inputType": "name",
  "matchedLocationId": "123456789",
  "locationName": "Mall del Sol",
  "locationAddress": "Guayaquil, Ecuador",
  "locationCity": "Guayaquil",
  "latitude": -2.1552,
  "longitude": -79.8916,
  "postId": "3913133928818931888",
  "shortcode": "DZOPpNZx_iw",
  "postUrl": "https://www.instagram.com/p/DZOPpNZx_iw/",
  "mediaType": "video",
  "caption": "A public location-tagged post",
  "publishedAt": "2026-08-10T14:20:00Z",
  "likeCount": 530,
  "commentCount": 21,
  "playCount": 10400,
  "engagementRate": 0.052981,
  "username": "example_creator",
  "creatorVerified": false
}
```

### Pricing behavior

The Actor uses two transparent events:

- `apify-default-dataset-item` is charged once after a post passes every filter and is saved successfully.
- `search-page` is charged once after a non-empty Instagram location-post page is retrieved and processed successfully.

Place lookups, failed requests, retries, duplicates, and empty pages are not charged. A page can still be billable when every candidate on it is rejected by the selected filters, because the upstream data was successfully retrieved and evaluated.

Filters are applied after each page is downloaded. A restrictive date, engagement, media, or verification filter can therefore require more billed pages and produce fewer saved posts than requested. Use `maximumPagesPerLocation` to set a predictable cost ceiling before the run begins.

Suggested Store prices per 1,000 saved posts: Free `$0.70`, Starter `$0.65`, Scale `$0.60`, Business `$0.55`.

### Reliability and budget protection

- Provider failures are retried after 3, 9, and 27 seconds.
- Repeated pagination cursors stop safely.
- Duplicate posts are not saved twice.
- The Actor checks the Apify run charge limit before provider work and before each saved batch.
- `maximumPagesPerLocation` prevents an open-ended search when filters are too restrictive.
- `RUN_PROGRESS` is refreshed during the run, while `OUTPUT` stores the final matching, filtering, pagination, billing, provider-request, and error summary.
- Partial dataset results remain available when a later page or location fails.
- If Instagram's provider rejects a cursor it previously returned, the Actor retries after 3, 9, and 27 seconds. If the cursor remains invalid, it treats that point as the natural end of the location's pagination, preserves all prior results, and does not charge any rejected attempt.

### Limits and expected behavior

- Instagram can return fewer posts than the number shown publicly on a place page.
- Place-name searches can be ambiguous. Use an Instagram location URL or numeric ID for deterministic matching.
- The maximum configured depth is 100 non-empty pages per matched location.
- Posts without a publication timestamp are excluded when a date filter is active.
- Engagement counters and location metadata depend on what Instagram exposes at extraction time.
- The Actor does not access private accounts, private posts, or content that requires an Instagram login.

### Environment variable

Add `SOCIALAPI_KEY` as a secret environment variable in the Actor settings. Never place the provider key in source files or the input.

### Responsible use

Use this Actor only for lawful analysis of publicly available information. Respect applicable privacy, data-protection, intellectual-property, advertising, and platform rules. Do not use the output for harassment, sensitive profiling, unlawful surveillance, spam, or attempts to identify private individuals. You are responsible for your inputs, retention policy, and downstream use of the data.

### Support

For reproducible support, open an issue on the Actor page with the run ID, input with sensitive values removed, expected behavior, and the relevant log lines. Never include API keys, authorization headers, private continuation tokens, or another customer's data.

# Actor input Schema

## `locations` (type: `array`):

Enter Instagram location names, numeric IDs, or explore/location URLs. Each line is resolved and processed independently.

## `coordinates` (type: `array`):

Optional latitude,longitude pairs used to find nearby Instagram places. Example: -2.1552,-79.8916.

## `resultsPerLocation` (type: `integer`):

Maximum number of posts saved for every matched Instagram location. Only saved posts are billable.

## `matchStrategy` (type: `string`):

Best match selects the strongest candidate, exact only accepts an exact place name, and all processes multiple candidates.

## `maximumLocationsPerQuery` (type: `integer`):

Maximum number of location candidates processed for each name or coordinate input. Best and exact modes normally use 1.

## `maximumPagesPerLocation` (type: `integer`):

Stops scanning after this many non-empty search pages per matched place. Each successfully processed non-empty page is billed once; errors, retries, and empty pages are not billed.

## `onlyPostsNewerThan` (type: `string`):

Optional inclusive publication date in YYYY-MM-DD format.

## `onlyPostsOlderThan` (type: `string`):

Optional inclusive publication date in YYYY-MM-DD format.

## `includeImages` (type: `boolean`):

Save single-image Instagram posts.

## `includeReels` (type: `boolean`):

Save video and Reel posts.

## `includeCarousels` (type: `boolean`):

Save carousel posts containing multiple media items.

## `minimumLikes` (type: `integer`):

Save only posts with at least this many likes. Use 0 to disable the filter.

## `minimumComments` (type: `integer`):

Save only posts with at least this many comments. Use 0 to disable the filter.

## `minimumPlays` (type: `integer`):

Save only videos with at least this many plays. Image posts are excluded when this value is above 0.

## `verifiedCreatorsOnly` (type: `boolean`):

Save posts only when Instagram marks the creator as verified.

## `includeLocationInfo` (type: `boolean`):

Add the resolved place name, address, city, category, coordinates, phone, and website when available.

## `maxConcurrency` (type: `integer`):

Number of matched locations processed simultaneously. Lower this value if the provider rate-limits requests.

## Actor input object example

```json
{
  "locations": [
    "Mall del Sol Guayaquil"
  ],
  "coordinates": [],
  "resultsPerLocation": 100,
  "matchStrategy": "best",
  "maximumLocationsPerQuery": 1,
  "maximumPagesPerLocation": 20,
  "onlyPostsNewerThan": "",
  "onlyPostsOlderThan": "",
  "includeImages": true,
  "includeReels": true,
  "includeCarousels": true,
  "minimumLikes": 0,
  "minimumComments": 0,
  "minimumPlays": 0,
  "verifiedCreatorsOnly": false,
  "includeLocationInfo": true,
  "maxConcurrency": 3
}
```

# Actor output Schema

## `results` (type: `string`):

Filtered Instagram posts stored in the default dataset.

## `posts` (type: `string`):

Filtered Instagram posts stored in the default dataset.

## `summary` (type: `string`):

Matching, filtering, pagination, billing, provider request, and error diagnostics.

## `progress` (type: `string`):

Latest recoverable checkpoint for active and completed locations.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        "Mall del Sol Guayaquil"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraping_solutions/instagram-location-posts-local-creator-finder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "locations": ["Mall del Sol Guayaquil"] }

# Run the Actor and wait for it to finish
run = client.actor("scraping_solutions/instagram-location-posts-local-creator-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    "Mall del Sol Guayaquil"
  ]
}' |
apify call scraping_solutions/instagram-location-posts-local-creator-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraping_solutions/instagram-location-posts-local-creator-finder"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/K0ggGloNG3gsdUVRT/builds/FgXA2e3UTOWiDMDii/openapi.json
