Bark Scraper — Pros, Reviews & Category Coverage — $4/1k avatar

Bark Scraper — Pros, Reviews & Category Coverage — $4/1k

Pricing

from $4.00 / 1,000 records

Go to Apify Store
Bark Scraper — Pros, Reviews & Category Coverage — $4/1k

Bark Scraper — Pros, Reviews & Category Coverage — $4/1k

Bark.com scraper for 10 countries incl. US: category coverage and gap finder per city, pros with ratings and reviews, and profile URL enrichment. Phone numbers are not collected. No login or cookies. MCP-ready for AI agents. $4 per 1,000 records.

Pricing

from $4.00 / 1,000 records

Rating

0.0

(0)

Developer

Khrystyna Skotte

Khrystyna Skotte

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Bark Scraper: Pros, Reviews & Category Coverage

Scrape Bark.com in 10 countries, including the United States. Get the service professionals listed in a city, their ratings, reviews, response times and profile details, or run the cheap coverage mode to see which services Bark has a page for in which city, and where it has none.

No Bark account, no cookies, no API key, no proxy. The actor reads the same public pages a visitor sees, over plain HTTP, so runs are fast and small (512 MB).

What you get

The actor has three modes.

ModeOne row isUse it for
coverage (default)one city x service pairMarket-gap research: where does Bark have no page, a state page only, or a thin city page
listingsone professional found on a city x service pageLead lists, competitor mapping, rating and review benchmarks
profilesone Bark company profile URLEnriching a list of Bark profile links

An empty input ({}) runs a small coverage sample: San Diego, CA for "cake", "dog grooming" and "house cleaning". Any other input runs the mode you set (default coverage).

Coverage row fields

Coverage is built to answer one question: is a service covered in a city? Bark answers with the URL it redirects to, and the actor reads that.

FieldExampleMeaning
recordTypecoverageRow type
marketplace, countrybark, usSource and Bark country site
city, serviceSan Diego, CA, dog groomingThe pair you asked for, exactly as typed
categoryExiststrueBark has this service category at all (false = no such category)
cityPageExiststrueBark has a page for this service in this city
coverageLevelcitycity, region, country or none (see below)
matchedSlug, matchType, matchedCategorypet-grooming, all-words, Dog & Pet GroomingWhich Bark category your words resolved to
resolvedCity, regionSlug, citySlugSan Diego, California, california, san-diegoHow the city was resolved
proCountnullAlways null: Bark does not print a pro count anywhere (see Limits)
resultCount12Pros listed on the city page
avgRating, ratingReviewCount4.58, 2919City-page aggregate rating and review count
priceRange, priceMin, priceMax, priceAvg$125 - $250 (Avg: $160), 125, 250, 160Price range Bark shows (US pages)
topPros, topProUrlsnames and profile linksFirst three pros on the page
pageUrlBark URLThe page that was checked
nearbyPlaces, relatedServices["Chula Vista", "Coronado"]Other cities and related categories Bark links
slugsTried[{"slug":"cake-makers","path":"california/san-diego","status":301,...}]Every URL tried and the HTTP result
error, scrapedAtnull, ISO timeFailure text (if any) and timestamp

How to read coverageLevel

ValueWhat Bark didMeaning
cityThe city page returned 200Bark has a page for the service in that city. resultCount says how many pros it lists (it can still be 0)
regionThe city URL redirected to the state or province pageThe category exists in the region, but Bark has no page for this city
countryRedirected to the national category pageThe category exists only nationally, nothing local
noneThe category URL does not existBark has no such category. This is a visible gap

A miss still produces a row, so gaps show up in your dataset instead of being silently dropped.

Listing row fields

FieldExample
recordType, marketplace, countrylisting, bark, us
searchCity, searchService, matchedSlugAustin, TX, dog grooming, pet-grooming
category, city, listingUrlDog & Pet Grooming, Austin, city page URL
cityAvgRating, cityPriceRange, position5, $85 - $125 (Avg: $110), 2
providerId, sellerProfileId4GqZp, 1132005
providerName, profileUrl, profileImageUrlVirtuous Pet Care, Bark URL, image URL
locationAustin, TX
description, aboutCard blurb and the full About text
providerRating, reviewCount5, 2 (rating is null when the pro has no reviews)
hiresCount, responseTime10, 3+ day response time (hires only when Bark shows it)
yearsInBusiness, companySize, remoteServiceswhen Bark shows them
isElite, badgesfalse, ["Certificate of Excellence 2021"]
categories[{"name":"Dog & Pet Grooming","slug":"pet-grooming"}]
services["Overnight pet sitting", "In-home pet grooming"]
photosCount, photoUrls5, up to 20 image URLs
websiteUrl, linkswebsite and social links the pro published
publicPhoneNumbers, publicEmailsonly numbers or addresses written in the pro's own text
qa[{"question": "...", "answer": "..."}]
featuredReviewone review quoted on the city page
reviewswith Include reviews: author, rating, date, text, platform
detailError, scrapedAtprofile-fetch failure text (if any), timestamp

Fields a profile does not show are left out of the row rather than invented. Treat every field as optional when you load the data.

Why this one

  • 10 countries: US, UK (gb), Canada, Ireland, Australia, New Zealand, South Africa, Singapore, France, Germany. The best-known Bark scraper on the Store covers GB and IE only, so US data was not available from it.
  • Coverage mode: one cheap row per city x service with categoryExists, cityPageExists and coverageLevel. I found no other Bark actor on the Store that offers this.
  • Plain-English services: type "dog grooming" and the actor resolves it with Bark's own service search to pet-grooming, and reports the match type. You can also pass Bark slugs or category URLs.
  • Bulk input: lists of cities and services, or a CSV or Google Sheet link.
  • Compatible input names: categories, locations and targetType work as aliases of services, cities and mode, so inputs written for other Bark scrapers run unchanged.
  • Partial results kept: if one target fails, the others still return, and a summary record lists the status per target.

Use cases

  1. Find service gaps in a city. Run coverage for a city against a long list of services. Rows with coverageLevel of region, country or none are services Bark does not serve locally there.
  2. Compare supply across cities. Run the same service across many cities and sort by resultCount, avgRating and priceAvg.
  3. Build a local-pro lead list. Listings mode returns names, ratings, review counts, response times, websites and profile links for the pros on each city page.
  4. Benchmark pricing. Coverage rows carry the price range Bark shows for the city and service (US pages).
  5. Monitor competitors' reputations. Re-run profiles mode on a list of Bark profile URLs on a schedule and track providerRating, reviewCount and hiresCount.
  6. Research reviews. Turn on Include reviews to get the reviews shown on each profile with their source platform (Bark, Facebook, Google Maps, Houzz and others).
  7. Market entry research for a marketplace or directory. Cross-check Bark coverage with another marketplace's supply to find categories with demand and no listings.

Input

InputTypeDefaultMeaning
modeselectcoveragecoverage, listings or profiles
countryselectusus, gb, ca, ie, au, nz, za, sg, fr, de
citiesstring listnone"San Diego, CA", "Austin", "Leeds", "Toronto, ON", "west-yorkshire/leeds", or a Bark city page URL
servicesstring listnonePlain names ("dog grooming"), Bark slugs ("pet-grooming") or category URLs
listUrlstringnoneCSV or Google Sheet link. Rows can be city,service pairs, a single city, or Bark URLs
startUrlsstring listnoneBark city x category pages (listings) or company URLs (profiles)
profileUrlsstring listnoneBark company profile URLs (profiles mode)
maxItemsinteger10Cap on provider rows in listings and profiles modes. Coverage always returns every city x service
fetchDetailsbooleantrueListings: open each profile for the full detail set. Off = only what the city card shows (faster)
includeReviewsbooleanfalseAdd the reviews array to each provider row. No extra requests
maxReviewsPerProviderinteger20Cap on reviews per provider
includeNearbybooleanfalseListings: also collect from the Nearby Places pages until maxItems is reached
maxConcurrencyinteger4Parallel workers. Requests are still spaced out globally
proxyConfigurationproxynoneNot needed. Set one only if you see HTTP 403 or 429 errors
categories, locations, targetTypeAliases of services, cities, mode (discovery = listings)

Example: coverage across several cities

{
"mode": "coverage",
"country": "us",
"cities": ["San Diego, CA", "Austin, TX", "Denver, CO"],
"services": ["dog grooming", "house cleaning", "cake", "goat yoga"]
}

This returns 12 rows, one per city x service. A service Bark has no category for returns categoryExists: false and coverageLevel: "none".

Example: providers with reviews

{
"mode": "listings",
"country": "us",
"cities": ["Austin, TX"],
"services": ["dog grooming"],
"maxItems": 25,
"includeReviews": true,
"includeNearby": true
}

Example: UK

{
"mode": "coverage",
"country": "gb",
"cities": ["London", "Leeds", "Manchester"],
"services": ["electrician", "wedding cake"]
}

For UK and Canadian cities, Bark puts a region in the URL. The actor finds it for you, but each city that needs a region lookup costs extra time (about 45 seconds for Leeds in a cloud run). Pass "west-yorkshire/leeds" or "Toronto, ON" to skip the lookup.

Example: enrich profile URLs

{
"mode": "profiles",
"profileUrls": ["https://www.bark.com/en/us/company/virtuous-pet-care/4GqZp/"],
"includeReviews": true
}

Example: from a spreadsheet

{
"mode": "coverage",
"listUrl": "https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit?usp=sharing"
}

Share the sheet as "anyone with the link". Use city,service rows, or a single city column and put the services in the services input.

Example: input written for another Bark scraper

{
"targetType": "discovery",
"categories": ["electricians"],
"locations": ["london"],
"country": "gb",
"maxItems": 2,
"includeReviews": true
}

Real output rows

These rows come from real cloud runs.

Coverage: city page found

{
"recordType": "coverage",
"marketplace": "bark",
"country": "us",
"city": "San Diego, CA",
"service": "house cleaning",
"categoryExists": true,
"cityPageExists": true,
"coverageLevel": "city",
"matchedSlug": "cleaners",
"matchType": "exact",
"matchedCategory": "House Cleaning",
"categoryId": 1212,
"resolvedCity": "San Diego, California",
"regionSlug": "california",
"citySlug": "san-diego",
"proCount": null,
"resultCount": 12,
"avgRating": 4.58,
"ratingReviewCount": 2919,
"priceRange": "$125 - $250 (Avg: $160)",
"priceMin": 125,
"priceMax": 250,
"priceAvg": 160,
"topPros": ["Remedy Cleaning", "Stephanie's Detailed Cleaning Services", "Truth Cleaning Services"],
"topProUrls": [
"https://www.bark.com/en/us/company/remedy-cleaning/9jZQO/",
"https://www.bark.com/en/us/company/stephanies-detailed-cleaning-services/mzmpy/",
"https://www.bark.com/en/us/company/truth-cleaning-services/Xm0Zm/"
],
"pageUrl": "https://www.bark.com/en/us/cleaners/california/san-diego/",
"nearbyPlaces": ["Chula Vista", "Coronado", "El Cajon", "Escondido", "Imperial Beach", "La Jolla"],
"relatedServices": ["Commercial & Office Cleaning", "Deep Cleaning Services", "End of Tenancy Cleaning", "Carpet Cleaning", "Window Cleaners", "Oven Cleaning"],
"slugsTried": [{"slug": "cleaners", "path": "california/san-diego", "status": 200, "redirectedTo": null}],
"error": null,
"scrapedAt": "2026-10-22T02:30:50.944Z"
}

Coverage: a gap

In the same run, "cake" in San Diego returned categoryExists: true, cityPageExists: false, coverageLevel: "region", matchedSlug: "cake-makers", resultCount: 0 and pageUrl: https://www.bark.com/en/us/cake-makers/california/. Bark's category exists for California, but not for the city. The wedding-cakes category it also tried redirected to its national page.

Listing row

{
"recordType": "listing",
"marketplace": "bark",
"country": "us",
"searchCity": "Austin, TX",
"searchService": "dog grooming",
"matchedSlug": "pet-grooming",
"category": "Dog & Pet Grooming",
"city": "Austin",
"listingUrl": "https://www.bark.com/en/us/pet-grooming/texas/austin/",
"cityAvgRating": 5,
"cityPriceRange": "$85 - $125 (Avg: $110)",
"position": 2,
"providerId": "4GqZp",
"sellerProfileId": 1132005,
"providerName": "Virtuous Pet Care",
"profileUrl": "https://www.bark.com/en/us/company/virtuous-pet-care/4GqZp/",
"location": "Austin, TX",
"providerRating": 5,
"reviewCount": 2,
"responseTime": "3+ day response time",
"remoteServices": false,
"isElite": false,
"badges": [],
"categories": [
{"name": "Dog & Pet Grooming", "slug": "pet-grooming"},
{"name": "Pet Care", "slug": "pet-services"},
{"name": "Dog Training", "slug": "dog-training"}
],
"services": ["Overnight pet sitting", "In-home pet grooming", "Puppy training", "Pet taxi"],
"photosCount": 5,
"publicPhoneNumbers": [],
"publicEmails": [],
"qa": [{"question": "What do you love most about your job?", "answer": "I love getting to spoil beloved fur-family members. ..."}],
"reviews": [
{"author": "Corinne Mason", "rating": 5, "date": "2020-06-24", "text": "Stephanie does a wonderful job and takes her time with our fur babies. ...", "platform": "Facebook"}
],
"scrapedAt": "2026-10-22T02:28:21.348Z"
}

Long text fields, the description, the About text, photoUrls and links are shortened here. Real rows carry them in full.

Run summary

Every run also stores an OUTPUT record in the key-value store with the mode, country, number of records, number of targets, number failed, and one status line per target (city_page, no_city_page with the fallback level, no_category, ok or error).

Pricing

Pay per event, no subscription.

EventPrice
Actor start$0.001
Record (one coverage row or one provider row)$0.004

That is $4.00 per 1,000 rows, plus the start event. A coverage check of 50 cities x 20 services is 1,000 rows, about $4. A listings run of 200 providers costs about $0.80. Reviews are embedded in the provider row and cost nothing extra. Apify's free plan credits cover small tests.

Compare like with like: a listings row here includes the full profile (about text, services, Q&As, photos, badges), not just the card. Set fetchDetails to false if you only want the card fields.

Runs in cloud testing used 512 MB and took seconds for the default sample. Set a max charge per run in the Apify run options if you want a hard spending cap.

Limits and FAQ

Does Bark show how many pros a city has? No. Bark prints no total count on city pages, in its structured data, or in its APIs that I could find. proCount is therefore always null. resultCount is the number of pros listed on the page.

How many pros per city page? A city page lists up to about 12 pros, in an order Bark reshuffles on each request. There is no paging. To go beyond one page, turn on includeNearby to collect from the Nearby Places pages for the same service, or list more cities.

Are phone numbers included? No. On Bark, phone numbers sit behind a "Reveal phone number" button, and the actor does not click it. publicPhoneNumbers and publicEmails only contain numbers or addresses a pro wrote in their own About or Q&A text, so they are often empty.

Is coverageLevel: none always a true gap? It means the category URL Bark would use does not exist. Service names are matched with Bark's own service search, and matchType and slugsTried show what was tried. If your wording is unusual, pass the Bark slug or category URL directly.

Why is a UK city slow? Bark puts a region in UK and Canadian URLs. When a bare city name is given, the actor scans region pages to find the link. This is cached per city for the run. A town that no region page of that category links to (Bromley for electricians in my test) comes back at region level, and slugsTried shows why. Give "region/city" to be exact.

Can it be blocked? In cloud runs without a proxy, Bark returned data. From one home IP, bursts of about 300 requests per minute got HTTP 403 for a few minutes. The actor spaces requests 350 ms apart and retries 403 with a growing delay. A proxy input exists if you ever need it.

India? Not supported: Bark's India site is not a working marketplace the actor can read.

Not collected: phone reveals, accreditations (rendered client-side with no data in the page), and review owner replies (not present in the profile pages I inspected).

Is this legal? The actor reads publicly visible pages and does not log in. Bark's robots.txt disallows crawling of /company/ paths, so decide for yourself whether that fits your use and your jurisdiction, and follow Bark's terms. Do not use the data to send unsolicited messages in ways your local law forbids.

Integrations

  • API: start runs and fetch the dataset with the Apify API. Example: POST https://api.apify.com/v2/acts/chimerical_quicklime~bark-scraper/runs?token=YOUR_TOKEN with the input JSON as the body, then GET /v2/datasets/{datasetId}/items?format=csv.
  • Python and JavaScript: use the apify-client package: client.actor("chimerical_quicklime/bark-scraper").call(run_input=...).
  • Schedules: run coverage weekly on the same city list and diff the datasets to see when Bark adds or drops a category in a city.
  • Webhooks: trigger a webhook when a run succeeds to push rows into your own system.
  • Make, Zapier, n8n: use the Apify app or HTTP module to run the actor and read the dataset.
  • Google Sheets: export the dataset as CSV or use the Apify Sheets integration. The same sheet can feed listUrl.
  • AI agents (MCP): the actor can be called through Apify's MCP server, so an agent can ask "which services are missing in Austin on Bark?" and receive coverage rows.

Output views

In the Apify console the dataset has two tables: Pros (name, rating, reviews, hires, response time, location, badges, website, profile) and Coverage (city, service, coverage level, category and city-page flags, pros listed, rating, price range, top pros, page URL).

Support

Found a city or service that returns the wrong thing? Open an issue on the actor page with the input and the run link. Bark changes its pages from time to time, and issues with reproducible inputs get fixed fastest.