# HappyCow Scraper \[$2.50/1K💰] | Vegan Restaurants (`ahmed_jasarevic/happycow-scraper`) Actor

Scrape HappyCow vegan and vegetarian restaurants by city or country: address, coordinates, cuisine, price level, rating, reviews, hours, photos and vegan features. $2.50 per 1,000 venues.

- **URL**: https://apify.com/ahmed_jasarevic/happycow-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 results

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?

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

## HappyCow Scraper – Vegan & Vegetarian Restaurant Data

Scrape public **HappyCow** vegan and vegetarian restaurant listings by city, state or country. Get name, address, coordinates, cuisine, price level, rating, review count, opening hours, photos, vegan features, website, menu and listing URL. **$2.50 per 1,000 venues.**

### Map Plant-Based Dining

HappyCow is a global directory of vegan and vegetarian restaurants, cafes, shops and services. This Actor turns public city, region and venue pages into structured records for food apps, travel guides, market researchers, restaurants and outreach teams.

- **Market research** — map plant-based dining by city, state or country.
- **Travel and food apps** — import venue names, coordinates, cuisines and photos.
- **Sales and partnerships** — build lists of vegan-friendly businesses for outreach.
- **Monitoring** — schedule runs to track new openings, ratings and review counts.
- **Coverage analysis** — compare vegan supply across regions.

### How It Works

![How the HappyCow Scraper works: from a city, state or venue URL to structured vegan restaurant records.](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-happycow-scraper.webp)

The Actor reads public HappyCow city, state, country and venue pages, follows the available result pages, and normalizes each venue into one dataset row. Pass exact city URLs for the fastest runs, or enable region expansion for broader coverage.

- One row per venue.
- City, state, country and direct venue URLs are supported.
- Region expansion adds child city pages.
- Fields that HappyCow does not publish stay `null`.

### Search By City, Region Or Venue

Use `startUrls` for exact locations or venues:

- **City pages** — Austin, Berlin, London, New York and thousands of other cities.
- **State and country pages** — expand them into child cities with `expandRegions`.
- **Venue pages** — pass direct venue URLs for detail-only fields such as hours and website.
- **Limits** — cap saved venues with `maxItems` and total work with `maxRequestsPerCrawl`.

### Restaurant Fields

Each venue record includes the name, venue ID, full address, street, city, region, country, postal code, phone, latitude, longitude, coordinates, cuisine types, price level, rating, review count, favorites count, opening hours, photos, primary image, vegan features, vegan type, website, menu, description, listing URL, source and timestamp.

City listing records include the core venue card data. Direct venue pages can add opening hours, website, menu, postal code and favorites count.

### Input – Configure A HappyCow Run

| Field | Type | Default | Notes |
|---|---|---|---|
| `startUrls` | array | Austin, Texas | HappyCow city, state, country or venue URLs |
| `maxItems` | integer | `200` | Maximum venues saved to the dataset |
| `expandRegions` | boolean | `false` | Expands country or state pages into child city pages |
| `maxRequestsPerCrawl` | integer | `1000` | Safety cap for large region runs |
| `proxy` | object | Apify Proxy on | Standard Apify Proxy configuration |

### Output – Vegan Restaurant Fields

Each dataset item can contain:

- `name`, `venueId`
- `address`, `street`, `city`, `region`, `country`, `postalCode`
- `phone`
- `latitude`, `longitude`, `coordinates`
- `cuisineType`
- `priceLevel`
- `rating`, `reviewCount`, `favoritesCount`
- `openingHours`
- `photos`, `primaryImage`
- `veganFeatures`, `veganType`
- `website`, `menu`
- `description`
- `listingUrl`
- `source`
- `scrapedAt`

### Example Input – Austin, Texas

```json
{
  "startUrls": [{ "url": "https://www.happycow.net/north_america/usa/texas/austin/" }],
  "maxItems": 200,
  "expandRegions": false,
  "proxy": { "useApifyProxy": true }
}
```

### Example Output – Austin Restaurant

```json
{
  "name": "Seriously Vegan",
  "venueId": "522209",
  "address": "9225 W Parmer Ln Unit No -106, Austin, Texas, USA",
  "street": "9225 W Parmer Ln Unit No -106",
  "phone": "+1-737-218-8299",
  "city": "Austin",
  "region": "Texas",
  "country": "USA",
  "postalCode": null,
  "latitude": 30.478101,
  "longitude": -97.766414,
  "coordinates": { "latitude": 30.478101, "longitude": -97.766414 },
  "cuisineType": ["Indian"],
  "priceLevel": "Moderate",
  "rating": 5,
  "reviewCount": 15,
  "favoritesCount": null,
  "openingHours": null,
  "photos": ["https://images.happycow.net/venues/500/52/22/hcmp522209_4059813.jpeg"],
  "primaryImage": "https://images.happycow.net/venues/500/52/22/hcmp522209_4059813.jpeg",
  "veganFeatures": ["Vegan", "Indian", "Take-out", "Breakfast"],
  "veganType": "vegan",
  "website": null,
  "menu": null,
  "description": "Fully vegan Indian restaurant offering a variety of vegan dishes.",
  "listingUrl": "https://www.happycow.net/reviews/seriously-vegan-austin-522209",
  "source": "listing",
  "scrapedAt": "2026-10-31T12:00:00.000Z"
}
```

### Export Restaurant Data To JSON, CSV Or Excel And Schedule Runs

Download results as JSON, CSV, Excel or XML from the run page or through the Apify API. Connect runs to Google Sheets, Make, Zapier or webhooks, or schedule weekly refreshes to track new venues, ratings and review counts.

### Related Actors

- [Google Maps Scraper](https://apify.com/apify/google-maps-scraper) — add neighborhood context and nearby places
- [Google Search Scraper](https://apify.com/ahmed_jasarevic/google-search-scraper) — research vegan dining and local demand
- [Contact Details Scraper](https://apify.com/ahmed_jasarevic/contact-details-scraper) — enrich venue websites with emails and phones
- [Website Content Crawler](https://apify.com/apify/website-content-crawler) — collect public restaurant and menu content

### FAQ

#### What is HappyCow?

HappyCow is a global directory of vegan and vegetarian restaurants, cafes, shops and services.

#### Do I need a HappyCow account?

No. The Actor reads public listings and never asks for your HappyCow credentials.

#### Why are opening hours or website missing?

Those fields are not present on every city listing card. Pass direct venue URLs to collect the extra detail-page fields.

#### What does `expandRegions` do?

It turns a country or state page into its child city pages, up to two levels deep, so you can cover a region without listing every city manually.

#### Why are some venues missing a postal code?

Postal codes are published only on some venue detail pages. Listing-card rows can leave `postalCode` as `null`.

#### How much does it cost?

FREE and BRONZE users pay **$0.0025 per venue** ($2.50 per 1,000), SILVER pays **$0.00245** and GOLD+ pays **$0.0024**, plus a small Actor Start event and any proxy usage.

#### Can I scrape a single venue?

Yes. Pass its HappyCow venue URL in `startUrls`.

#### Is the data current?

Venue details, hours, ratings and availability change. Schedule regular runs if you need fresh data.

### For AI Agents & LLM Apps

Returns one row per HappyCow venue with address, coordinates, cuisine, price level, rating, reviews, photos, vegan features and contact links.

Minimal working input:

```json
{ "startUrls": [{ "url": "https://www.happycow.net/north_america/usa/texas/austin/" }], "maxItems": 24 }
```

Output fields: `name, venueId, address, street, city, region, country, postalCode, phone, latitude, longitude, coordinates, cuisineType, priceLevel, rating, reviewCount, favoritesCount, openingHours, photos, primaryImage, veganFeatures, veganType, website, menu, description, listingUrl, source, scrapedAt`.

Behaviors an agent should know:

- `startUrls` accepts city, state, country and direct venue URLs.
- `maxItems` caps saved venues.
- `expandRegions: true` expands country or state pages into child cities.
- `openingHours`, `website`, `menu` and `favoritesCount` usually require direct venue URLs.
- `postalCode` can be `null` on listing-card rows.
- Free users get a 10-venue preview.

Billing: **$0.0025 per venue** on FREE/BRONZE ($2.50 per 1,000), $0.00245 on SILVER and $0.0024 on GOLD+, plus a small Actor Start event.

### Legal & Compliance Disclaimer

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by HappyCow.

It collects publicly available venue listings — no login and no private account. Venue details, hours, ratings and menu links are self-reported and may change. Users are responsible for complying with HappyCow's terms and applicable privacy, consumer and marketing law. Nothing here is legal or dietary advice.

### SEO Keywords

happycow scraper, vegan restaurants, vegetarian restaurants, plant based restaurants, vegan restaurant data, happycow listings, vegan food map, restaurant data api, happycow api, vegan business leads, vegetarian dining, restaurant ratings data, vegan market research, plant based food data, city restaurant listings, happycow export, vegan directory, restaurant coordinates

# Actor input Schema

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

HappyCow city/country listing pages (e.g. https://www.happycow.net/north_america/usa/texas/austin/) or individual venue detail pages (https://www.happycow.net/reviews/<slug>-<id>). Add one per line or use Bulk edit.

## `maxItems` (type: `integer`):

Maximum number of venue rows to save to the dataset. Listing pages are followed automatically until this limit is reached or the last page is scraped.

## `expandRegions` (type: `boolean`):

If enabled, country/state listing URLs are expanded to their child city pages (up to 2 levels deep, max 200 children per page). Leave off when you pass exact city URLs.

## `maxRequestsPerCrawl` (type: `integer`):

Hard safety cap on total HTTP requests for the run. About one request is needed per 27 venues.

## `proxy` (type: `object`):

Apify Proxy settings. Residential proxies are enabled by default because HappyCow rate-limits datacenter IPs. Set useApifyProxy to false only for small tests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.happycow.net/north_america/usa/texas/austin/"
    }
  ],
  "maxItems": 200,
  "expandRegions": false,
  "maxRequestsPerCrawl": 1000,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.happycow.net/north_america/usa/texas/austin/"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/happycow-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 = {
    "startUrls": [{ "url": "https://www.happycow.net/north_america/usa/texas/austin/" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/happycow-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 '{
  "startUrls": [
    {
      "url": "https://www.happycow.net/north_america/usa/texas/austin/"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call ahmed_jasarevic/happycow-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/happycow-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/UcIwVLR2vhdhJngh7/builds/5LT4GLjLEhd869DAY/openapi.json
