# Foursquare Places Scraper - Search, Chains, Phones & Emails (`scrapersdelight/foursquare-places-scraper`) Actor

Search Foursquare places by city, radius, category and name: address, coordinates, categories, phone, website, email, socials, date created and refreshed. Or pull a chain's live locations in 20 US cities with rating, check-ins, hours and tips. No login or API key.

- **URL**: https://apify.com/scrapersdelight/foursquare-places-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Lead generation, Travel, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 places

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Foursquare Places Scraper do?

**Foursquare Places Scraper** exports Foursquare place data two ways. **Search** finds places by city, coordinates and radius, bounding box or whole country, filtered by Foursquare category and place name, across Foursquare's own open dataset of 103.5 million places worldwide. **Chain locations** reads foursquare.com's live chain pages for 20 US metros, with ratings, check-ins, opening hours, popular hours, tips and photos. Built for lead generation, local market research, site selection and POI enrichment.

Foursquare scraper · Foursquare API alternative · Foursquare venues export · Foursquare POI data · Swarm places

- **Search 103.5 million places:** any city, a radius around coordinates, a bounding box or a whole country, nearest first with the distance in km.
- **Filter on what Foursquare knows:** category (any level of Foursquare's category taxonomy), name keywords, region, city, postcode, open places only, refreshed since a date.
- **Contacts in the row:** phone, website, email, Facebook, Instagram and X (Twitter), plus date created, refreshed and closed.
- **Live chain locations:** up to 30 locations per chain and city with rating, rating count, check-ins, visitors, hours, popular hours, tips, photos and menu link, joined to the open dataset for email and dates.
- **No login, no cookies, no Foursquare API key:** type a city and a category, or a chain name.
- **Pay only for delivered places:** no start fee; nothing charged for empty searches, missing chain pages, duplicates or filtered rows.
- **Export anywhere:** JSON, CSV, Excel, XML, RSS; schedules, webhooks, Make, Zapier, n8n, Google Sheets, Slack.
- **Works with AI agents:** call it through the Apify API or the MCP server; `compact` output keeps rows small.

### What data can you get from Foursquare?

<table>
<tr><td>🆔 Foursquare id (<code>id</code>)</td><td>🏷️ Name</td><td>🗂️ Categories + full category paths</td></tr>
<tr><td>📍 Address, city, state, postcode, country</td><td>🌐 Latitude / longitude</td><td>📏 Distance from your centre (<code>distanceKm</code>)</td></tr>
<tr><td>☎️ Phone</td><td>🔗 Website</td><td>✉️ Email</td></tr>
<tr><td>👍 Facebook page</td><td>📸 Instagram handle</td><td>🐦 X (Twitter) handle</td></tr>
<tr><td>📅 Date created</td><td>🔄 Date refreshed</td><td>🚫 Date closed / <code>isClosed</code></td></tr>
<tr><td>⭐ Rating + rating count (chains)</td><td>👣 Check-ins + visitors (chains)</td><td>🕒 Hours + open now (chains)</td></tr>
<tr><td>📈 Popular hours (chains)</td><td>💬 Tips (chains)</td><td>🖼️ Photos + menu link (chains)</td></tr>
<tr><td>🔗 Chain id + Foursquare chain total</td><td>🧭 Directions link</td><td>🗓️ Data date (<code>dataAsOf</code>)</td></tr>
</table>

On a 1,000-row search (restaurants around Chicago) 76% of places had a phone, 52% a website, 17% an email and 87% a street address. On the default demo (20 coffee shops in Lower Manhattan) it was phone 70%, website 70%, email 35%, Facebook 50%. On 100 live chain locations (Target and Chipotle, Chicago and New York) every row had a rating and check-ins, 97% a phone, 96% opening hours and, after the open-data join, 58% an email.

### How to scrape Foursquare with Foursquare Places Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) - $5 of monthly credit, no card needed.
2. Open [Foursquare Places Scraper](https://apify.com/scrapersdelight/foursquare-places-scraper) and click **Try for free**.
3. Pick a **Mode**: *Search* (worldwide) or *Chain locations* (20 US metros).
4. For a search, add **Categories** (e.g. `Dentist`) and **Locations** (e.g. `Austin, TX`); for chains, add **Chains** (e.g. `Target`) and pick **Cities**. Set **Max places**.
5. Click **Start**. Places stream into the dataset as they are found.
6. Open the **Storage** tab and **Export** as JSON, CSV or Excel - or let a schedule run it for you.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `mode` | Select | `search` (default) = Foursquare Open Source Places, worldwide; `chainLocations` = live foursquare.com chain pages |
| `categories` | List | Search. Category names or ids at any level: `Coffee Shop`, `Dentist`, `Pizzeria`, `Restaurant`, `4bf58dd8d48988d1e0931735` |
| `searchTerms` | List | Search. Keep places whose name contains any of these words: `starbucks`, `pizza`, `dental` |
| `locations` | List | Search. `Austin, TX`, `Berlin, Germany`, `40.758,-73.985`, or a country name (`Iceland`) for a whole country |
| `chains` | List | Chain mode. `Starbucks`, `Target`, `CVS Pharmacy`, `Chipotle`, `7-Eleven` |
| `cities` | Multi-select | Chain mode. Any of the 20 metros below; empty = all 20 |
| `startUrls` | List | Chain mode. `https://foursquare.com/locations/starbucks/new-york-city` (redirect, app, www or bare host) |
| **🎯 Area & filters** (search) | | |
| `radiusKm` | Number | 0 = automatic: 2 km around coordinates, 2-30 km around a city by its size. Default `0` |
| `boundingBox` | Text | `minLng,minLat,maxLng,maxLat`, e.g. `-74.02,40.70,-73.93,40.80` |
| `categoryGroup` | Select | One of Foursquare's ten top-level groups (Dining and Drinking, Retail, Health and Medicine...). Default any |
| `countryCode` | Text | `US`, `DE`, `United Kingdom`. With no locations, searches the whole country |
| `region` / `locality` | Text | The record's own region (`TX`) or city (`Brooklyn`) field must equal this |
| `postcodePrefixes` | List | `100`, `SW1`, `10115` |
| **✂️ Refine results** | | |
| `openOnly` | Boolean | Skip places marked closed. Default `true` |
| `refreshedSince` / `createdSince` | Date | Keep records refreshed / created on or after a date |
| `withPhoneOnly`, `withWebsiteOnly`, `withEmailOnly`, `withSocialOnly` | Boolean | Keep only rows that have that contact. Default `false` |
| **➕ Extra data** | | |
| `enrichFromOpenData` | Boolean | Chain mode. Add email, date created / refreshed / closed and category paths by Foursquare id. Default `true`, no extra charge |
| **🔁 Monitoring** | | |
| `monitorMode` | Boolean | Deliver only places this monitor never delivered. Pair with a schedule |
| `monitorName` / `resetMonitor` | Text / Boolean | Name the memory; start it again |
| **📦 Output** | | |
| `maxResults` | Integer | Default `100`; `0` = up to 100,000. Shared across locations or chain pages |
| `compact` / `excludeEmptyFields` | Boolean | Core fields only / drop empty fields |
| **⚙️ Advanced** | | |
| `proxyConfiguration` | Proxy | Not needed (direct by default); used only as a fallback |

#### Input JSON

```json
{
  "mode": "search",
  "categories": ["Dentist"],
  "locations": ["Austin, TX", "Dallas, TX"],
  "withPhoneOnly": true,
  "refreshedSince": "2023-01-01",
  "maxResults": 200
}
```

```json
{
  "mode": "chainLocations",
  "chains": ["Starbucks", "Target"],
  "cities": ["chicago", "boston", "seattle"],
  "maxResults": 300
}
```

#### Pick the mode before anything else

*Search* reads Foursquare Open Source Places and works anywhere, for any category; it is the one to use for lead lists and market maps. *Chain locations* reads one live foursquare.com page per chain and city: it is the only source of ratings, check-ins, hours and tips, and it exists for these 20 US metros only: Atlanta, Boston, Chicago, Cleveland, Dallas, Denver, Detroit, Houston, Los Angeles, Miami, Minneapolis, New York City, Orlando, Philadelphia, Phoenix, Sacramento, San Francisco, Seattle, Tampa, Washington DC.

#### Type cities as "City, Region, Country"

`Austin, TX`, `Portland, OR`, `Portland, ME`, `London, ON, Canada`, `San Jose, Costa Rica`. A bare name picks the most populous match (`Paris` = Paris, France). Coordinates (`40.758,-73.985`) skip the lookup. Each result row says which area found it (`searchArea`), and RUN_SUMMARY shows the centre and radius used.

#### Use categories for "what", name words for "who"

`categories: ["Dentist"]` returns dental practices whatever they are called. `searchTerms: ["starbucks"]` returns places whose name contains the word. Both together must both match.

### ⬆️ Output

Every place becomes one dataset item. A real search row (demo input, nearest coffee shop to the centre of New York City):

```json
{
  "id": "4aea76b3f964a520abbb21e3",
  "name": "Starbucks",
  "primaryCategory": "Coffee Shop",
  "categoryPaths": ["Dining and Drinking > Cafe, Coffee, and Tea House > Coffee Shop"],
  "address": "291 Broadway",
  "city": "New York",
  "state": "NY",
  "postalCode": "10007",
  "countryCode": "US",
  "lat": 40.714855,
  "lng": -74.005936,
  "distanceKm": 0.065,
  "phone": "(212) 406-5310",
  "website": "https://www.starbucks.com/store/18526/",
  "email": "info@starbucks.com",
  "instagram": "starbucks",
  "twitter": "starbucks",
  "dateCreated": "2009-10-30",
  "dateRefreshed": "2025-02-03",
  "isClosed": false,
  "url": "https://foursquare.com/v/starbucks/4aea76b3f964a520abbb21e3",
  "dataSource": "Foursquare Open Source Places 2025-02-06 (Apache-2.0)"
}
```

A real chain-locations row (Target, Chicago, trimmed):

```json
{
  "id": "578ebdcacd10e7675f6488fa",
  "name": "Target",
  "primaryCategory": "Big Box Store",
  "brand": "Target",
  "address": "2650 N Clark St",
  "crossStreet": "Schubert and Clark",
  "neighborhood": "Park West",
  "formattedPhone": "(773) 799-9142",
  "website": "https://www.target.com/sl/chicago-lincoln-park-north/3221",
  "rating": 7.4,
  "ratingSignals": 81,
  "checkins": 3607,
  "totalVisitors": 882,
  "hours": ["Mon–Sat: 7:00 AM–11:00 PM", "Sun: 8:00 AM–11:00 PM"],
  "popularHours": ["Sat: 9:00 AM–8:00 PM", "Sun: 10:00 AM–8:00 PM"],
  "createdAt": "2016-07-19T23:54:50.000Z",
  "sourceTotalLocations": 44
}
```

#### Fields

| Field | Type | What it is | Search (1,000 rows) | Chains (100 rows) |
|---|---|---|---|---|
| `id`, `name`, `categories`, `lat`, `lng`, `url` | mixed | Foursquare id, name, categories, point, place URL | 100% | 100% |
| `address` | string | Street address | 87% | 99% |
| `postalCode` | string | Postcode | 95% | 100% |
| `phone` | string | Phone | 76% | 97% |
| `website` | string | Website | 52% | 91% |
| `email` | string | Email | 17% | 58% (join) |
| `facebook` / `instagram` / `twitter` | string | Social profiles (+ `...Url`) | 17% / 2% / 10% | 58% / 44% / 84% |
| `dateCreated` / `dateRefreshed` | string | When Foursquare added / last refreshed the record | 100% | 99% (join) |
| `dateClosed`, `isClosed` | string, bool | Closed date (only with `openOnly: false`) | - | - |
| `distanceKm` | number | Distance from the search centre | 100% | - |
| `rating`, `ratingSignals`, `ratingColor`, `verified` | mixed | Foursquare rating out of 10 | - | 100% |
| `checkins`, `totalVisitors`, `tipCount` | integer | Community counts | - | 100% |
| `hours`, `hoursStatus`, `isOpen`, `hoursTimeframes` | mixed | Opening hours | - | 96% |
| `popularHours`, `popularTimeframes` | array | When it is busy | - | 93% |
| `topTips`, `tipText`, `tipAuthor`, `tipUrl` | mixed | Tips shown on the page | - | 44% |
| `photos`, `imageUrls` | array | Photo URLs | - | 96% |
| `menuUrl`, `hasMenu` | mixed | Menu link | - | 12% |
| `crossStreet`, `neighborhood`, `formattedPhone`, `timeZone` | string | Location details | - | 78-100% |
| `adminRegion`, `postTown`, `poBox` | string | UK-style address parts | London test: 85% / 25% / 3% | - |
| `chainIds`, `brand`, `queryCity`, `sourceUrl`, `sourceTotalLocations` | mixed | Chain page provenance | - | 100% |
| `searchArea`, `dataSource`, `dataAsOf`, `scrapedAt` | string | Provenance and data date | 100% | 100% |

### How can I use Foursquare places data?

- 📞 **Sales teams:** build call lists of dentists, gyms or cafés in a territory with phone, website and email.
- 🗺️ **Site selection:** count competitors within 1 km of a candidate address, sorted by distance.
- 🏪 **Chain analysts:** track where a chain is listed in 20 US metros, with rating and check-in counts per location.
- 🧭 **Data teams:** enrich a POI table with Foursquare ids, categories and coordinates; join on `id`.
- 📈 **Market research:** compare category density across cities or postcodes.
- 🤖 **AI agents:** answer "find vegan restaurants near X" with `compact` rows through MCP.

### How much does it cost to scrape Foursquare?

One **Place** event per delivered row. No start fee.

| Places | Cost at $0.004 per place |
|---|---|
| 10 | $0.04 |
| 100 | $0.40 |
| 1,000 | $4.00 |

Nothing is charged for an empty search, a chain page that does not exist, a duplicate, a row your filters removed, or a place an earlier monitor run already delivered. The free plan's $5 of monthly credit covers about 1,250 places.

### Integrations, API, scheduling & MCP

Schedule a weekly chain-locations run with `monitorMode` on to receive only newly listed locations. Send results to Google Sheets, Slack, Make, Zapier or n8n, or to your own endpoint with a webhook. Call the actor from code with `apify-client` for [Python](https://apify.com/scrapersdelight/foursquare-places-scraper/api/python) or [JavaScript](https://apify.com/scrapersdelight/foursquare-places-scraper/api/javascript), or from an AI agent through the [MCP server](https://apify.com/scrapersdelight/foursquare-places-scraper/api/mcp).

### More local-business scrapers

- 🗺️ [Google Maps Polygon Scraper](https://apify.com/scrapersdelight/google-maps-polygon-scraper) - use it when you need Google's listings inside a drawn area.
- ⭐ [Yelp Business Scraper](https://apify.com/scrapersdelight/yelp-business-scraper) - use it for Yelp ratings and reviews counts.
- 🧳 [Tripadvisor Scraper](https://apify.com/scrapersdelight/tripadvisor-scraper) - use it for hotels, restaurants and attractions on Tripadvisor.
- 🧰 [Google Local Services Scraper](https://apify.com/scrapersdelight/google-local-services-scraper) - use it for Google-screened tradespeople.
- 📇 [Local Business Contact Enricher](https://apify.com/scrapersdelight/local-business-enricher) - use it to add named contacts to a list of business websites.

See every actor on [our profile](https://apify.com/scrapersdelight).

### Limits & empty runs

- **Search data date:** search rows come from the Foursquare Open Source Places release of **2025-02-06**, the newest copy published without a login (newer monthly releases need a Foursquare Places Portal or Hugging Face account). Each row carries `dataAsOf` and `dateRefreshed`; use `refreshedSince` to keep recently checked places (44% of the 1,000-row Chicago test were refreshed in 2024-2025).
- **Pins and addresses as Foursquare publishes them:** a few records sit at the wrong point or repeat; repeated ids are delivered once.
- **Chain pages:** at most 30 locations per chain and city (Foursquare's own page limit; `sourceTotalLocations` shows its full count), 20 US metros only.
- **Not available:** reviews beyond the tips on chain pages, 168-value hourly busyness, price tier, curated lists and place-id lookups - foursquare.com shows those only to signed-in users.
- **Speed:** a 100-place city search took 11 s and a 1,000-place search 21 s in our local test at the 1 GB CPU share. Very wide searches (a whole country with a rare filter) stop when their reading cost is out of proportion to the places found; RUN_SUMMARY says why each area stopped.

### FAQ

#### How much does Foursquare Places Scraper cost?

$0.004 per delivered place, no start fee. 100 places cost $0.40.

#### How many places can Foursquare Places Scraper return?

Up to 100,000 per run in search mode (set `maxResults`), shared evenly across your locations. Chain mode returns up to 30 per chain and city.

#### Do I need a Foursquare API key or login for Foursquare Places Scraper?

No. Search reads Foursquare's openly licensed places dataset; chain mode reads public foursquare.com pages.

#### How fresh is the Foursquare Places Scraper search data?

It is the 2025-02-06 Foursquare Open Source Places release. Chain-location rows are read live on every run.

#### Can I schedule Foursquare Places Scraper to find new places?

Yes. Turn on `monitorMode` and schedule the run: each run delivers only places that monitor has not delivered before.

#### Can I use Foursquare Places Scraper with the Apify API or Python?

Yes - see the API tab for `apify-client` examples in Python and JavaScript.

#### Can AI agents use Foursquare Places Scraper through MCP?

Yes. Add it in the Apify MCP server and set `compact: true` for short rows.

#### Why did Foursquare Places Scraper return no results?

The area had no place matching every filter (RUN_SUMMARY lists each area, its radius and how many places matched), or a chain has no page for that city. Nothing is charged for an empty run. Widen `radiusKm` or drop a filter.

#### Which categories does Foursquare Places Scraper understand?

Any Foursquare category name or id, at any level of the taxonomy - `Restaurant` matches every restaurant type, `Pizzeria` only pizzerias.

#### Is the Foursquare data licensed for reuse?

The Foursquare Open Source Places data is published by Foursquare Labs, Inc. under the Apache License 2.0; each run stores Foursquare's notice as `NOTICE` in the run's key-value store.

#### Your feedback

Something missing or wrong? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/foursquare-places-scraper/issues/open) and we will look at it.

### Data source and licence

Search rows: Foursquare OS Places, © 2025 Foursquare Labs, Inc. All rights reserved. The Foursquare OS Places dataset (the "Data") is licensed under the [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0); it is distributed "as is", without warranties or conditions of any kind. This actor reads the release unchanged except for formatting (field names, URL forms, lower-cased emails). Read through the public [Source Cooperative mirror](https://source.coop/fused/fsq-os-places). City lookup uses [GeoNames](https://www.geonames.org/) (CC BY 4.0).

# Actor input Schema

## `mode` (type: `string`):

Search = places by area, category and name from Foursquare Open Source Places (release 2025-02-06, with email and dates). Chain locations = live foursquare.com pages with rating, hours and tips (up to 30 per chain and city).

## `categories` (type: `array`):

Search mode. Foursquare category names or ids, any level, e.g. "Coffee Shop", "Dentist", "Pizzeria", "Restaurant", "4bf58dd8d48988d1e0931735". A place matches if any of its categories contains one of these.

## `searchTerms` (type: `array`):

Search mode. Keep places whose name contains any of these words, e.g. "starbucks", "pizza", "dental". Combines with Categories (both must match). Empty = any name.

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

Search mode. Cities as "City, Region, Country" ("Austin, TX", "Berlin, Germany"), coordinates "40.758,-73.985", or a country name for a whole-country search. Results come nearest the centre first.

## `chains` (type: `array`):

Chain or brand names, e.g. "Starbucks", "Target", "CVS Pharmacy", "Chipotle", "7-Eleven". Each is read for every city picked below (all 20 if none).

## `cities` (type: `array`):

US metros foursquare.com publishes chain pages for. Empty = all 20.

## `startUrls` (type: `array`):

Chain locations mode. foursquare.com/locations/<chain>/<city> links from any Foursquare host, e.g. https://foursquare.com/locations/starbucks/new-york-city. Adds to Chains x Cities.

## `radiusKm` (type: `number`):

Search radius around each location. 0 = automatic: 2 km around coordinates, 2-30 km around a city by its size (New York 30, Berlin 22, Austin 12).

## `boundingBox` (type: `string`):

Search a rectangle instead of (or as well as) locations: "minLongitude,minLatitude,maxLongitude,maxLatitude", e.g. "-74.02,40.70,-73.93,40.80" (Manhattan).

## `categoryGroup` (type: `string`):

Keep only one of Foursquare's ten top-level category groups.

## `countryCode` (type: `string`):

Keep places in this country (two-letter code or name, e.g. US, DE, "United Kingdom"). With no locations, searches the whole country.

## `region` (type: `string`):

Keep places whose region field equals this, as Foursquare writes it, e.g. "TX", "CA", "NY" in the US.

## `locality` (type: `string`):

Keep places whose city (locality) field equals this, e.g. "Brooklyn". Use it to cut a radius search to one municipality.

## `postcodePrefixes` (type: `array`):

Keep places whose postcode starts with any of these, e.g. "100" (Manhattan ZIPs), "SW1", "10115".

## `openOnly` (type: `boolean`):

Skip places Foursquare has marked closed (dateClosed set).

## `refreshedSince` (type: `string`):

Keep places whose Foursquare record was last refreshed on or after this date (YYYY-MM-DD), e.g. 2023-01-01. The best freshness filter for the open dataset.

## `createdSince` (type: `string`):

Keep places first added to Foursquare on or after this date (YYYY-MM-DD) - newer businesses.

## `withPhoneOnly` (type: `boolean`):

Keep only places that have a phone number.

## `withWebsiteOnly` (type: `boolean`):

Keep only places that have a website.

## `withEmailOnly` (type: `boolean`):

Keep only places that have an email address (open dataset; chain mode needs the join below).

## `withSocialOnly` (type: `boolean`):

Keep only places with a Facebook, Instagram or X (Twitter) profile.

## `enrichFromOpenData` (type: `boolean`):

Chain locations mode. Join each live venue to the open dataset by its Foursquare id to add email, date created / refreshed / closed and full category paths.

## `monitorMode` (type: `boolean`):

Deliver (and charge) only places this monitor never delivered: new chain locations on a schedule, or the next-nearest places on a repeated search.

## `monitorName` (type: `string`):

Optional. Name the monitor to keep its memory when you change the search; empty = one memory per search.

## `resetMonitor` (type: `boolean`):

Forget what this monitor delivered before and start again.

## `maxResults` (type: `integer`):

Most places this run delivers, shared across locations or chain pages. 0 = no limit (100,000). Chain pages list at most 30 each.

## `compact` (type: `boolean`):

Core fields only (id, name, category, address, coordinates, phone, website, email, rating, URL) - sized for AI agents and MCP.

## `excludeEmptyFields` (type: `boolean`):

Remove null, empty-string and empty-list fields from each row.

## `proxyConfiguration` (type: `object`):

Not needed: both sources answer Apify's own network. A proxy is used only as a fallback if a request is refused.

## Actor input object example

```json
{
  "mode": "search",
  "categories": [
    "Coffee Shop"
  ],
  "locations": [
    "New York, NY"
  ],
  "radiusKm": 0,
  "categoryGroup": "any",
  "openOnly": true,
  "withPhoneOnly": false,
  "withWebsiteOnly": false,
  "withEmailOnly": false,
  "withSocialOnly": false,
  "enrichFromOpenData": true,
  "monitorMode": false,
  "resetMonitor": false,
  "maxResults": 20,
  "compact": false,
  "excludeEmptyFields": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `items` (type: `string`):

One row per Foursquare place: id, name, categories, address, coordinates, phone, website, email, social profiles, dates - plus rating, check-ins, hours and tips for chain locations.

## `runSummary` (type: `string`):

RUN_SUMMARY: each search area or chain page with what was found, read and delivered, bytes read, delivered vs charged, and the measured fill of every field you received.

# 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 = {
    "categories": [
        "Coffee Shop"
    ],
    "locations": [
        "New York, NY"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/foursquare-places-scraper").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 = {
    "categories": ["Coffee Shop"],
    "locations": ["New York, NY"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/foursquare-places-scraper").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 '{
  "categories": [
    "Coffee Shop"
  ],
  "locations": [
    "New York, NY"
  ],
  "maxResults": 20
}' |
apify call scrapersdelight/foursquare-places-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/foursquare-places-scraper"
        }
    }
}
```

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/NFMbacuV22GWpJbnl/builds/nX4kdzczUtymB45XZ/openapi.json
