Foursquare Locations Scraper
Pricing
from $0.06 / 1,000 item extracteds
Foursquare Locations Scraper
🏪 Export public Foursquare brand locations by city with venue IDs, addresses, phones, coordinates, hours, ratings, selected tips, photos, and source links.
Pricing
from $0.06 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
22 days ago
Last modified
Categories
Share
Extract public Foursquare venue records from brand-and-city location pages without an account or Foursquare API key.
Turn URLs such as https://redirect.foursquare.com/locations/starbucks/new-york-city into clean JSON, CSV, Excel, XML, or RSS datasets containing venue names, addresses, phones, coordinates, opening hours, ratings, selected tips, photos, and source links.
Use the Actor for chain expansion analysis, local lead lists, hospitality research, recurring directory refreshes, and brand-footprint monitoring.
What does Foursquare Locations Scraper do?
Foursquare Locations Scraper reads public Foursquare brand directory pages and saves one venue per dataset row.
It supports two equivalent input routes:
- 🏪 paste Foursquare
/locations/<brand>/<city>URLs from the redirect, app, www, or bare host; - 📍 provide brand and city pairs and let the Actor build safe URL slugs;
- 🎯 combine multiple cities in one run;
- 🧹 deduplicate repeated venues by their Foursquare venue ID;
- ⛔ stop at a global
maxItemslimit.
The current public page embeds up to 30 detailed venue records per supplied brand/city URL. The output also includes Foursquare's displayed total location count so you can assess the wider footprint without confusing it with the number exported by the page.
Who is it for?
Retail and chain expansion teams
Compare where a brand appears across cities, inspect neighborhood coverage, and feed coordinates into market maps.
Lead generation teams
Build targeted venue lists with phone numbers, addresses, websites, and opening hours for compliant business outreach.
Hospitality and local-market analysts
Compare categories, ratings, rating-signal counts, selected tips, and hours across public venue listings.
Data and reputation teams
Schedule recurring exports and diff the latest Foursquare records against a warehouse snapshot.
Developers and AI agents
Use the Apify API or MCP to turn a brand/city request into structured place data without maintaining a parser.
Why use this Foursquare scraper?
- ⚡ HTTP-first: no browser startup or paid API credentials.
- 🧭 Source-specific: records retain Foursquare venue IDs and canonical links.
- 📦 Export ready: download JSON, CSV, Excel, XML, or RSS from the dataset.
- 🔁 Repeatable: save the input as an Apify Task and schedule it.
- 💳 Pay per result: charges apply only to unique venue rows produced, plus a small run start fee.
- 🛡️ Batch safe: invalid or unavailable targets are skipped without discarding useful rows from other targets; an all-failed run still fails visibly.
What Foursquare location data can I extract?
| Field | Description |
|---|---|
venueId | Stable Foursquare venue identifier |
name | Public venue name |
brand | Brand slug converted to readable text |
queryCity | City requested in the source URL |
category | Primary Foursquare venue category |
neighborhood | Neighborhood label when available |
address, crossStreet | Street and cross-street details |
city, state, postalCode, country | Address components |
latitude, longitude | Venue coordinates |
phone, formattedPhone | Contact number variants |
website | Venue or brand website supplied by Foursquare |
rating, ratingSignals | Foursquare rating and signal count |
checkinsCount, usersCount, tipCount | Source-reported community activity counts, not footfall |
countryCode, timeZone | Published country code and venue time zone |
categoryIds, chainIds | Published category and chain identifiers |
twitter, facebook | Source contact references (usually a handle or page ID, not invented URLs) |
verified | Whether Foursquare marks the venue verified |
isOpen, hoursStatus | Current opening state and status text |
hours, popularHours | Existing flattened weekly schedules |
hoursTimeframes, popularTimeframes | Structured source periods: days, optional includesToday, and open entries with renderedTime |
menuUrl | Public menu link when present |
directionsUrl | Ready-to-open coordinate directions link |
tipText, tipAuthor, tipUrl | One selected public Foursquare tip |
imageUrls | Up to three public venue image URLs |
venueUrl, sourceUrl | Canonical venue and directory links |
sourceTotalLocations | Total locations reported by the source page |
scrapedAt | UTC extraction timestamp |
Optional fields are omitted when Foursquare does not publish them for a venue. The Actor does not invent missing contacts, ratings, or hours.
How much does it cost to scrape Foursquare locations?
Pricing is pay per event:
- Run start: $0.005 per run.
- Venue: tiered by your Apify plan; the BRONZE price is $0.000091861 per unique saved venue.
A 10-venue starter run is about $0.00592 at the BRONZE rate. A 30-venue page is about $0.00776. Your exact price is shown in Apify Console before the run and may be lower on higher plans.
The free Apify plan includes monthly platform credits, so small tests may fit inside those credits. Keep maxItems low while validating a new brand/city URL.
How to scrape Foursquare locations
- Open the Actor input page.
- Paste one or more public Foursquare brand/city URLs, or add brand/city objects.
- Set
maxItemsto the most venues you want saved. - Click Start.
- Review the Foursquare venues dataset view.
- Export the data as JSON, CSV, Excel, XML, or RSS.
- Save the run as a Task if you want recurring updates.
Input parameters
| Parameter | Type | Required | Purpose |
|---|---|---|---|
startUrls | array | conditional | Foursquare /locations/<brand>/<city> URLs from redirect, app, www, or the bare host |
locations | array | conditional | Objects with brand and city strings |
maxItems | integer | no | Global unique venue limit; default 10 |
Provide at least one startUrls or locations entry. If both are present, the Actor processes both and deduplicates canonical input URLs and venue IDs.
Input example: exact URL
{"startUrls": [{ "url": "https://redirect.foursquare.com/locations/starbucks/new-york-city" }],"maxItems": 10}
HTTP or HTTPS location links from redirect.foursquare.com, app.foursquare.com, www.foursquare.com, or foursquare.com are accepted and normalized to one canonical HTTPS target. A venue detail URL, arbitrary website, or different path shape is skipped.
Input example: brand and city
{"locations": [{ "brand": "Starbucks", "city": "New York City" },{ "brand": "Starbucks", "city": "Chicago" }],"maxItems": 40}
Names are normalized to lowercase URL slugs. For unusual branding, use the exact URL copied from Foursquare to avoid ambiguity.
Output example
{"venueId": "51964c1a498eeaca10e9ea4c","name": "Starbucks","brand": "starbucks","queryCity": "new york city","category": "Coffee Shop","neighborhood": "Upper East Side","address": "822 Lexington Ave","city": "New York","state": "NY","postalCode": "10065","country": "United States","latitude": 40.76462850100318,"longitude": -73.96668685798046,"formattedPhone": "(212) 572-0984","rating": 6,"ratingSignals": 213,"verified": true,"hoursStatus": "Closed until 5:00 AM","tipText": "Service is slow but they are friendly","venueUrl": "https://app.foursquare.com/v/starbucks/51964c1a498eeaca10e9ea4c","sourceUrl": "https://redirect.foursquare.com/locations/starbucks/new-york-city","sourceTotalLocations": 317,"scrapedAt": "2026-07-21T00:00:00.000Z"}
Page coverage and limits
Foursquare's public brand/city page currently embeds up to 30 venue objects while separately reporting a larger total count for some chains.
This Actor exports the useful records actually embedded in every supplied URL. It does not claim that one URL exports every venue in the reported total.
To build a wider market sample, supply additional city pages. maxItems is a global cap across those pages, not a promise that a page contains that many records.
Machine-readable run coverage
Open Run coverage summary in the Output tab, or read KV record OUTPUT. Diagnostics do not add dataset rows or item charges. The existing overview remains available; Identity and coverage adds venue IDs, requested markets, community counts and reported totals.
savedUniqueCount: unique venue rows saved; equals the sum of per-targetsavedCountafter a completed run.requestedTargetCount: all supplied entries, before validation and canonical-target deduplication.uniqueTargetCount,duplicateInputTargetCount,invalidInputCount: distinct valid targets, repeated canonical inputs, and skipped invalid entries.attemptedTargetCount,unprocessedTargetCount: distinct valid targets attempted or not reached, usually because the global cap stopped processing. Unattempted targets are not labeled failed.globalCapStopped: the cap prevented inspection of remaining page records or targets; reaching the cap exactly at the end of the final page is not itself a stop.targets: each attempted canonicalsourceUrl,status(success,empty,failed),reportedTotal,embeddedVenueCount,savedCount,duplicateCount, and sanitizedfailureReasonwhen relevant. A valid duplicate-only page issuccesswith zero saved rows, not an inaccessible page. Duplicate counts cover records inspected before the cap, not unseen records.
The summary is persisted before no-results failure when possible; all-invalid or all-unavailable batches still fail. Initialization, storage or platform failures can prevent a complete summary.
Example for a capped page followed by an unattempted city:
{"savedUniqueCount": 2,"requestedTargetCount": 2,"uniqueTargetCount": 2,"duplicateInputTargetCount": 0,"attemptedTargetCount": 1,"unprocessedTargetCount": 1,"invalidInputCount": 0,"globalCapStopped": true,"targets": [{"sourceUrl": "https://redirect.foursquare.com/locations/example-coffee/example-city","status": "success","reportedTotal": 120,"embeddedVenueCount": 30,"savedCount": 2,"duplicateCount": 0}]}
Structured schedules preserve rendered source day labels and times, not normalized timestamps, inferred day numbers or 168 hourly popularity values. Each schedule is bounded to 32 periods and 32 open entries per period, with labels up to 200 characters; the existing flattened fields remain unchanged. Unknown values are omitted; numeric zero and boolean false are retained.
Tips for reliable runs
- ✅ Copy the public brand/city URL from Foursquare when possible.
- ✅ Begin with
maxItems: 10to inspect the result shape. - ✅ Use separate city URLs for a multi-market comparison.
- ✅ Store
venueIdas the warehouse merge key. - ✅ Compare
scrapedAtandsourceUrlwhen refreshing records. - ❌ Do not pass individual venue detail URLs.
- ❌ Do not assume every venue has a phone, rating, menu, tip, or photo.
Scheduling a Foursquare monitor
Create an Apify Task from a tested input, then add a daily, weekly, or monthly schedule.
A practical refresh workflow is:
- run the same brand/city list each week;
- export rows to a named table or warehouse;
- join on
venueId; - detect newly seen and missing locations;
- compare rating, hours, and contact changes;
- alert only on meaningful differences.
The Actor itself does not retain previous snapshots or label a venue as opened or closed. Your destination system controls that business logic.
Integrations
Google Sheets
Use the Apify Google Sheets integration to refresh a city-by-city location tracker for non-technical analysts.
Make
Trigger a run from a scenario, wait for completion, iterate dataset rows, and route qualified venues into a CRM.
Zapier
Start a saved Task on demand and send newly matched venue rows into sales or operations workflows.
Webhooks
Attach a run-succeeded webhook that notifies your ETL service with the dataset ID.
Warehouses and BI
Pull dataset JSON through the API and upsert on venueId into BigQuery, Snowflake, PostgreSQL, or a lakehouse.
Use the Actor with the Apify API
The Actor ID is automation-lab/foursquare-locations-scraper.
Keep your Apify token in an environment variable. Never commit it to source control.
JavaScript API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/foursquare-locations-scraper').call({locations: [{ brand: 'Starbucks', city: 'New York City' }],maxItems: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/foursquare-locations-scraper').call(run_input={'locations': [{'brand': 'Starbucks', 'city': 'New York City'}],'maxItems': 10,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL API example
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~foursquare-locations-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"locations":[{"brand":"Starbucks","city":"New York City"}],"maxItems":10}'
Use the returned run and dataset IDs to poll status and download results.
Use Foursquare Locations Scraper through MCP
Apify MCP lets Claude Code, Claude Desktop, Cursor, and VS Code call the Actor as a tool.
For Claude Code:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/foursquare-locations-scraper"
For Claude Desktop, Cursor, or VS Code:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/foursquare-locations-scraper"}}}
Example prompts:
- “Scrape 10 Starbucks locations from Foursquare in New York City.”
- “Compare public Foursquare ratings and hours for this brand in Chicago and Los Angeles.”
- “Return a CSV-ready list of venue IDs, phones, addresses, and coordinates.”
Data quality
The Actor preserves source values and omits unavailable optional fields rather than filling them with guesses.
Ratings and tips are public Foursquare signals, not independent verification. Opening status can change after scraping. Phone numbers and websites may belong to a chain rather than a specific branch when that is what the source publishes.
Always review a sample before using the data for decisions or outreach.
Error handling
The Actor validates each target independently. Invalid URL forms, incomplete brand/city rows, non-200 pages, and pages without the expected embedded state are logged and skipped while other targets continue.
The run fails with a clear error when no valid target is supplied or every target fails or yields zero venue records. One malformed request cannot silently become an empty successful dataset or discard useful rows already saved from another target.
Is it legal to scrape Foursquare locations?
This Actor accesses public web pages without bypassing a login or CAPTCHA.
You are responsible for your use case. Review Foursquare's terms, applicable database and privacy laws, and outreach rules in your jurisdiction. Do not use public contact information for spam, harassment, sensitive profiling, or unlawful discrimination.
Avoid republishing copyrighted photos or tip text beyond what your use case permits. Minimize stored personal information and honor valid deletion or correction requests.
Limitations
- One supplied page currently exposes up to 30 detailed venue records.
- The reported total may exceed exported rows.
- Only public brand/city location pages are supported.
- Individual venue URLs and free-form category search are out of scope.
- Optional fields vary by venue.
- Foursquare can change its page markup or embedded payload.
- The Actor does not enrich emails, fetch social profiles, or access private API data; social contact values are copied only when published in the same source response.
- Community activity counts are source-reported signals, not measured foot traffic.
- The Actor does not infer openings, closures, or ownership changes.
Troubleshooting
Why did my URL fail validation?
Confirm it is a Foursquare /locations/<brand>/<city> link from the redirect, app, www, or bare Foursquare host. Venue detail paths and unrelated Foursquare pages are not supported.
Why did I receive fewer venues than maxItems?
maxItems is a ceiling. The public page may expose fewer records, and duplicate venue IDs across inputs are saved only once.
Why is a phone, rating, photo, or tip missing?
Foursquare does not publish every optional field for every venue. Missing fields are omitted rather than represented as invented values.
What should I do after a source-layout error?
Retry once later to rule out a transient response. If it persists, include the public source URL and run ID in an issue so the parser can be checked against the current page.
Frequently asked questions
Does this Actor need a Foursquare API key?
No. It reads anonymous public brand/city pages.
Does it use AI, a browser, or a residential proxy?
No. The implementation uses direct HTTP and deterministic parsing of embedded structured state; it does not call an AI service, launch a browser, or use a proxy.
Where is run data retained?
Results, key-value records, and logs remain in the user's Apify storage under that account's retention settings and can be deleted with Apify's storage controls. Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed, and reports are retained for 30 days. There is no external results cache. Foursquare is the named public data source; this Actor is not affiliated with or endorsed by Foursquare.
Can it scrape every Foursquare venue in a city?
No. It is intentionally bounded to the records exposed by supplied public brand/city pages.
Can I export to Excel?
Yes. Choose Excel from the dataset export menu after the run.
Are duplicate venues charged twice?
No. Duplicate Foursquare venue IDs are skipped before saving and charging.
Can I schedule it?
Yes. Save a tested input as an Apify Task and attach a schedule.
Related scrapers
Combine this source-specific dataset with other Automation Lab tools when your workflow needs broader local-market coverage:
- Google Maps Lead Finder — discover businesses by map query and enrich lead fields.
- Zomato Restaurant Search Scraper — build restaurant-specific market lists.
- OpenStreetMap Scraper — retrieve open map place data when Foursquare-specific signals are not required.
Use source IDs separately. Do not assume that similarly named records from different platforms are the same venue without a careful address or coordinate match.
Support
If a valid public brand/city URL stops working, open an Actor issue and include:
- the input URL or brand/city pair;
- the Apify run ID;
- the expected result;
- the actual error or missing field;
- whether the same page opens anonymously in your browser.
That evidence makes source changes faster to reproduce and fix.