# Bark Scraper (`maximedupre/bark-scraper`) Actor

Scrape Bark.com providers by category and location, or enrich known profile URLs. Get names, profile URLs, ratings, reviews, services, locations, hires, response time, images, and visible public contact evidence when present.

- **URL**: https://apify.com/maximedupre/bark-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.35 / 1,000 scraped providers

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### 🔎 Bark scraper for service-provider data

Bark Scraper collects public service-provider data from [Bark.com](https://www.bark.com/). Search by service category and location, or paste known Bark profile URLs, then export provider names, profile URLs, ratings, review counts, hires, response times, descriptions, services, locations, profile images, source links, and optional public reviews.

Use this Bark scraper when you need local service-provider leads, market research, competitor checks, review evidence, or repeat exports from Bark.com without copying profile pages by hand. The Actor supports the public GB and IE Bark directory surfaces and does not ask for Bark cookies, login credentials, FireCrawl keys, or a source API key.

For a small first run, keep **What to collect** set to `Discover providers`, use a category such as `electricians`, choose a location such as `london`, and set **Maximum providers** to `25`. Keep **Include reviews** on for richer provider rows, or turn it off when you only need faster listing-level provider data.

### ✅ What this Bark Scraper does

- Scrapes public Bark.com service-provider directory pages.
- Accepts category and location searches for the United Kingdom and Ireland.
- Accepts direct Bark profile URLs for known providers.
- Saves one dataset row per provider.
- Extracts profile facts such as name, location, rating, review count, hires, response time, about text, services, profile image, and source URLs when Bark shows them.
- Optionally adds a `reviews` array to each provider row with visible public review author, rating, date, text, reply, and platform fields when available.
- Keeps Bark login-only contact details out of the output. Public email and phone fields are filled only when visible public source pages expose them.

### 📦 What data you get

Each output row is a Bark.com provider. The main fields are:

- `providerId` - public Bark profile identifier when available.
- `providerName` - provider or company name.
- `profileUrl` - canonical Bark profile URL.
- `profileImageUrl` - visible provider image URL.
- `category`, `country`, `city`, `location` - search and profile location context.
- `providerRating`, `reviewCount`, `hiresCount`, `responseTime` - public trust and lead-quality signals.
- `description`, `about`, `services` - public provider positioning and service details.
- `websiteUrl`, `publicEmails`, `publicPhoneNumbers` - public contact evidence only when visible.
- `reviews` - optional embedded public reviews when **Include reviews** is enabled.
- `listingUrl` - Bark listing page that produced the provider in discovery runs.

### 🧭 How to run it

You can start from discovery or from known profiles.

For discovery, choose:

- **What to collect**: `Discover providers`
- **Service categories**: Bark category slugs or plain service names, such as `electricians`, `plumbers`, or `photographers`
- **Locations**: city or area slugs, such as `london`, `manchester`, or `dublin`
- **Country**: United Kingdom or Ireland
- **Maximum providers**: the total provider rows to save

For profile enrichment, choose:

- **What to collect**: `Use profile URLs`
- **Bark profile URLs**: one or more public Bark company profile links
- **Include reviews**: on if you want public reviews embedded in each provider row

You can run the Actor from Apify Console, schedule it, call it through the Apify API, or export the dataset as JSON, CSV, Excel, XML, or RSS.

### 🧪 Example input

```json
{
  "targetType": "discovery",
  "categories": ["electricians", "plumbers"],
  "locations": ["london", "manchester"],
  "country": "gb",
  "includeReviews": true,
  "maxItems": 25
}
````

### 🧾 Example output

```json
{
  "providerId": "01Alb",
  "providerName": "Looks Lovely Limited",
  "profileUrl": "https://www.bark.com/en/gb/company/looks-lovely-limited-/01Alb/",
  "profileImageUrl": "https://d18jakcjgoan9.cloudfront.net/example.jpg",
  "category": "electricians",
  "country": "gb",
  "city": "London",
  "location": "Bromley, Greater London",
  "providerRating": 5,
  "reviewCount": 21,
  "hiresCount": 10,
  "responseTime": "1 hour response time",
  "description": "Domestic electrical and home automation services.",
  "about": "Public profile text shown by Bark.com.",
  "services": ["Electrician", "Home automation", "Networking"],
  "websiteUrl": null,
  "publicEmails": [],
  "publicPhoneNumbers": [],
  "reviews": [
    {
      "author": "Al Keshmirian",
      "rating": 5,
      "date": "2023-08-17",
      "text": "I'm extremely pleased with the electrician's service.",
      "reply": null,
      "platform": "Bark"
    }
  ],
  "listingUrl": "https://www.bark.com/en/gb/electricians/london/"
}
```

When **Include reviews** is off, the provider row is the same shape except the `reviews` field is omitted.

### 💰 Pricing

This Actor charges per saved provider. The pricing event is `Scraped provider` at `$0.00135` per provider, which is `$1.35` per 1,000 saved providers. There is no actor-start charge.

### ⚠️ Limits and caveats

- Country selection is currently limited to United Kingdom and Ireland.
- Bark profile data depends on what is publicly visible on Bark.com at run time.
- Bark login-only contact details are not extracted.
- Email and phone fields stay empty unless the public source visibly exposes them.
- Review enrichment adds visible public reviews to provider rows. It does not create separate review rows.

### ❓ FAQ

#### Can I scrape Bark.com profile URLs directly?

Yes. Choose `Use profile URLs` and paste one or more public Bark profile links. The Actor enriches each profile into a provider row.

#### Does this Bark scraper extract reviews?

Yes, when **Include reviews** is enabled and Bark shows public reviews on the profile page. Reviews are embedded inside the matching provider row.

#### Does it need Bark login credentials?

No. The Actor is built for public Bark.com pages. It does not ask for Bark cookies, login credentials, FireCrawl, or a source API key.

#### Can I use it for lead generation?

Yes. It returns provider identity, profile links, locations, ratings, service details, review evidence, and visible public contact evidence when present. It does not promise hidden Bark contact data.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~bark-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [Yellow Pages Scraper ↗](https://apify.com/maximedupre/yellowpages-scraper) - Collect local business listings, websites, phone numbers, addresses, ratings, and categories from YellowPages.com.
- [Business Address Scraper ↗](https://apify.com/maximedupre/business-address-scraper) - Find public business addresses from company websites for CRM enrichment and local lead lists.
- [Website Emails Scraper ↗](https://apify.com/maximedupre/website-emails-scraper) - Crawl websites you already know and extract visible contact emails.
- [Google Maps Shared List Scraper ↗](https://apify.com/maximedupre/google-maps-shared-list-scraper) - Export places from public Google Maps shared lists with addresses, websites, ratings, and reviews.
- [AmbitionBox Reviews Scraper ↗](https://apify.com/maximedupre/ambitionbox-reviews-scraper) - Export public company review data for employer research and reputation checks.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `targetType` (type: `string`):

Choose whether this run starts from known Bark profiles or discovers providers by category and location.

## `profileUrls` (type: `array`):

Use when `What to collect` is `Use profile URLs`.

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

Use Bark category slugs or plain service names.

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

Enter city or area slugs such as `london` or `west-midlands/birmingham`.

## `country` (type: `string`):

Choose the Bark country directory for category and location searches.

## `includeReviews` (type: `boolean`):

Add visible public reviews to each provider row when Bark exposes them.

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

Limit the total provider rows returned across all targets.

## Actor input object example

```json
{
  "targetType": "discovery",
  "profileUrls": [
    {
      "url": "https://www.bark.com/en/gb/company/looks-lovely-limited-/01Alb/"
    }
  ],
  "categories": [
    "electricians",
    "plumbers",
    "photographers"
  ],
  "locations": [
    "london",
    "manchester"
  ],
  "country": "gb",
  "includeReviews": true,
  "maxItems": 80
}
```

# 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 = {
    "targetType": "discovery",
    "profileUrls": [
        {
            "url": "https://www.bark.com/en/gb/company/looks-lovely-limited-/01Alb/"
        }
    ],
    "categories": [
        "electricians",
        "plumbers",
        "photographers"
    ],
    "locations": [
        "london",
        "manchester"
    ],
    "country": "gb",
    "includeReviews": true,
    "maxItems": 80
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/bark-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 = {
    "targetType": "discovery",
    "profileUrls": [{ "url": "https://www.bark.com/en/gb/company/looks-lovely-limited-/01Alb/" }],
    "categories": [
        "electricians",
        "plumbers",
        "photographers",
    ],
    "locations": [
        "london",
        "manchester",
    ],
    "country": "gb",
    "includeReviews": True,
    "maxItems": 80,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/bark-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "targetType": "discovery",
  "profileUrls": [
    {
      "url": "https://www.bark.com/en/gb/company/looks-lovely-limited-/01Alb/"
    }
  ],
  "categories": [
    "electricians",
    "plumbers",
    "photographers"
  ],
  "locations": [
    "london",
    "manchester"
  ],
  "country": "gb",
  "includeReviews": true,
  "maxItems": 80
}' |
apify call maximedupre/bark-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/bark-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bark Scraper",
        "description": "Scrape Bark.com providers by category and location, or enrich known profile URLs. Get names, profile URLs, ratings, reviews, services, locations, hires, response time, images, and visible public contact evidence when present.",
        "version": "0.0",
        "x-build-id": "vNISeXVjrgKNWLK2i"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~bark-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-bark-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/maximedupre~bark-scraper/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-bark-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/maximedupre~bark-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-bark-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "targetType": {
                        "title": "What to collect",
                        "enum": [
                            "discovery",
                            "profileUrls"
                        ],
                        "type": "string",
                        "description": "Choose whether this run starts from known Bark profiles or discovers providers by category and location.",
                        "default": "discovery"
                    },
                    "profileUrls": {
                        "title": "Bark profile URLs",
                        "type": "array",
                        "description": "Use when `What to collect` is `Use profile URLs`.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "categories": {
                        "title": "Service categories",
                        "type": "array",
                        "description": "Use Bark category slugs or plain service names.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Enter city or area slugs such as `london` or `west-midlands/birmingham`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "gb",
                            "ie"
                        ],
                        "type": "string",
                        "description": "Choose the Bark country directory for category and location searches.",
                        "default": "gb"
                    },
                    "includeReviews": {
                        "title": "Include reviews",
                        "type": "boolean",
                        "description": "Add visible public reviews to each provider row when Bark exposes them.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Maximum providers",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Limit the total provider rows returned across all targets.",
                        "default": 80
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
