This tutorial shows how to scrape Google Local Services provider listings from a prolist URL into CSV with the Google Local Services Scraper by URL template for UScraper. You will prepare the URL, import the workflow, set the export path, validate rows, and handle common issues.
Before you start
Prerequisites, scope, and policy guardrails
You need UScraper installed as a local desktop app, one approved Google Local Services prolist URL, and a folder where CSV exports can be written. A prolist URL is a rendered Local Services results page for a service and location, such as plumbers in New York or cleaners in Austin.
This guide is about visible provider listings, not private Google Ads dashboards. Google's Local Services Ads guide, Local Services API overview, OAuth setup docs, reporting docs, and Google Ads API campaign docs cover account, campaign, performance, and lead workflows. They are not the same task as exporting public provider cards from a result URL.
Compliance first: use pages you have permission to access, keep volume modest, do not bypass CAPTCHA, login, consent, or anti-bot screens, and keep a clear reason for collecting the dataset.
Input
Prepare a Google Local Services prolist URL
The template expects a Google Local Services URL, not a generic search page or a Google Business Profile API response. The bundled sample uses a URL shaped like https://www.google.com/localservices/prolist?q=plumber+new+york&hl=en-US&gl=us&src=1. Preserve the service, location, language, and country parameters that produced the cards you want.
Open the URL manually before automation. Confirm that provider cards load and that Google is not showing consent, account, or verification friction. If the page is sparse by hand, the CSV will be sparse too.
| Input type | Use it here? | Why |
|---|---|---|
| Google Local Services prolist URL | Yes | This is the direct input for the Navigate block and keeps the export tied to a specific service and location. |
| Google Local Services API credentials | No | Useful for approved account/reporting workflows, but not required for this visible-page tutorial. |
| Google Business Profile API | No | Business Profile APIs serve profile-management use cases, not Local Services result-card exports. |
| Hosted scraping API response | Optional | SerpApi, Apify, or other services can fit hosted JSON pipelines; this guide uses a local desktop workflow. |
Workflow
How the Google Local Services scraper works
The companion JSON workflow is simple at the block level: Set Window Size -> Navigate -> Wait for Page Load -> Sleep -> Load more passes -> Parse provider rows -> Wait for Element -> Structured Export -> End. The important work happens in the load passes and final parser.
The load passes scroll the page, then click visible controls such as "More", "Show more", "More providers", or "Next". The final JavaScript pass reads rendered card text, filters loaders and dialogs, creates hidden .uscraper-lsa-row elements, and stores export fields as data attributes for Structured Export.
Import the template
Open the template page, download the JSON workflow, and import it into UScraper.
Replace the prolist URL
Open Navigate and replace the sample plumber query with your approved Google Local Services prolist URL.
Set the CSV folder
Open Structured Export, confirm google-business-local-services-scraper.csv, and choose a project-specific local save location.
Run one validation URL
Start with a single URL. Watch the browser load providers, scroll, click available More or Next controls, and create rows.
Audit before scaling
Open the CSV, compare several rows against the page, then run additional services, cities, or client batches.
Output
Validate the Local Services CSV export
The JSON export defines the authoritative output shape. The workflow writes one row per parsed provider card and includes headers. Phone, profile, full hours, and service-detail fields are best effort because Google can hide them behind modals, change regional layouts, or expose them only after a user action.
google-business-local-services-scraper.csvColumn
page_url
The prolist URL processed for this provider row.
Column
provider
Provider or business name parsed from the listing card.
Column
rating
Visible star rating, such as 4.8 out of 5.
Column
rating_count
Visible review count when Google exposes it.
Column
service_type
Service category inferred from the URL query.
Column
experience
Experience text such as years in business.
Column
serve_area
Visible service-area line from the listing.
Column
profile_url
Local Services profile URL when available.
Column
phone
Phone number only when already visible in the loaded page.
Column
google_verified
Google Guaranteed, Google Screened, background checked, or related text.
Use a simple validation pass before treating the file as research data:
| Check | What good looks like | What to do if it fails |
|---|---|---|
| Row count | At least one provider row for a populated URL | Open the URL manually and confirm provider cards are visible. |
| Provider names | Names match visible cards, not buttons or loader text | Rerun after the page finishes loading; inspect for layout drift. |
| Source traceability | Every row includes the same page_url used for the run | Keep one file per service, city, or client batch when auditing. |
Alternatives
Google Local Services API vs scraper alternatives
If you are searching for a google local services api, first decide whether you need official account data or public result-page research. Google's Local Services API is the right starting point for approved account, campaign, performance, or lead workflows. A local services ads scraper helps inspect the visible provider marketplace for a service and location.
| Option | Best fit | Trade-off |
|---|---|---|
| Official Google Local Services API | Approved account management and reporting | Requires the official setup path and does not replace visible SERP/provider research. |
| SerpApi Google Local Services API | Hosted JSON extraction for developer pipelines | Adds a third-party API dependency and usage pricing. |
| Apify Local Services Ads and Google Verified scraper | Cloud actor workflows and code-driven automation | Runs through a hosted scraping platform instead of a local desktop app. |
| Octoparse Google Local Service scraper | No-code cloud/desktop template users | Useful alternative, but export behavior and runtime model differ. |
| UScraper template | URL-first local CSV exports from rendered pages | Best for analysts who want a local desktop workflow and spreadsheet output. |
Keep these Local Services constraints visible
Consent, CAPTCHA, and account prompts can stop a run
Pause when Google shows friction. Do not build around bypassing access controls.
Provider cards can change by market and date
Empty cells often mean regional layout differences, hidden panels, or fields that were not visible.
Export for review, not spam
Keep run date, source URL, and compliance notes with each dataset.
Frequently asked questions
Google Local Services pages can expose public provider listings, but automated collection may still be limited by Google terms, privacy law, advertising rules, database rights, and local data-use requirements. Use conservative pacing and do not bypass access controls.
Next step
Download the template and run a small batch
Start with one service and city, validate the CSV, then expand carefully. Each run should have a source URL, a date, a clear purpose, and a checked export file.
Download the workflow from Google Local Services Scraper by URL, browse more data workflows in the UScraper template library, or return to the UScraper blog for adjacent scraping tutorials.

