Foursquare Locations Scraper avatar

Foursquare Locations Scraper

Pricing

Pay per event + usage

Go to Apify Store
Foursquare Locations Scraper

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

Pay per event + usage

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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 exact Foursquare /locations/<brand>/<city> URLs;
  • 📍 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 maxItems limit.

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.
  • 🛡️ Fail closed: invalid hosts, malformed location paths, and empty extraction fail visibly.

What Foursquare location data can I extract?

FieldDescription
venueIdStable Foursquare venue identifier
namePublic venue name
brandBrand slug converted to readable text
queryCityCity requested in the source URL
categoryPrimary Foursquare venue category
neighborhoodNeighborhood label when available
address, crossStreetStreet and cross-street details
city, state, postalCode, countryAddress components
latitude, longitudeVenue coordinates
phone, formattedPhoneContact number variants
websiteVenue or brand website supplied by Foursquare
rating, ratingSignalsFoursquare rating and signal count
verifiedWhether Foursquare marks the venue verified
isOpen, hoursStatusCurrent opening state and status text
hours, popularHoursFlattened weekly schedules
menuUrlPublic menu link when present
directionsUrlReady-to-open coordinate directions link
tipText, tipAuthor, tipUrlOne selected public Foursquare tip
imageUrlsUp to three public venue image URLs
venueUrl, sourceUrlCanonical venue and directory links
sourceTotalLocationsTotal locations reported by the source page
scrapedAtUTC 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

  1. Open the Actor input page.
  2. Paste one or more public Foursquare brand/city URLs, or add brand/city objects.
  3. Set maxItems to the most venues you want saved.
  4. Click Start.
  5. Review the Foursquare venues dataset view.
  6. Export the data as JSON, CSV, Excel, XML, or RSS.
  7. Save the run as a Task if you want recurring updates.

Input parameters

ParameterTypeRequiredPurpose
startUrlsarrayconditionalExact redirect.foursquare.com/locations/<brand>/<city> URLs
locationsarrayconditionalObjects with brand and city strings
maxItemsintegernoGlobal 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
}

Only HTTPS URLs on redirect.foursquare.com with exactly two path slugs are accepted. A venue detail URL, arbitrary website, or another Foursquare host fails before scraping.

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.

Tips for reliable runs

  • ✅ Copy the public brand/city URL from Foursquare when possible.
  • ✅ Begin with maxItems: 10 to inspect the result shape.
  • ✅ Use separate city URLs for a multi-market comparison.
  • ✅ Store venueId as the warehouse merge key.
  • ✅ Compare scrapedAt and sourceUrl when 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:

  1. run the same brand/city list each week;
  2. export rows to a named table or warehouse;
  3. join on venueId;
  4. detect newly seen and missing locations;
  5. compare rating, hours, and contact changes;
  6. 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 os
from apify_client import ApifyClient
client = 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().items
print(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 run fails with a clear error when:

  • no URL or brand/city input is supplied;
  • a URL uses another domain, protocol, or path shape;
  • a brand/city object has an empty value;
  • Foursquare returns a non-200 response;
  • the public page no longer contains the expected embedded state;
  • all fetched pages yield zero venue records.

One malformed request cannot silently become an empty successful dataset.

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, social profiles, or private API data.
  • The Actor does not infer openings, closures, or ownership changes.

Troubleshooting

Why did my URL fail validation?

Confirm it begins with https://redirect.foursquare.com/locations/ and contains exactly a brand slug and city slug. Remove query parameters, venue detail paths, and copied tracking URLs.

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 a browser or residential proxy?

No. The current implementation uses direct HTTP and embedded structured state.

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.

Combine this source-specific dataset with other Automation Lab tools when your workflow needs broader local-market coverage:

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.