Install
openclaw skills install @vagif12/mapsdata-google-maps-leadsSearch live Google Maps businesses or enrich supplied companies with Mapsdata when a user needs local leads, business details, owner or decision-maker names, verified emails, phone intelligence, social profiles, CSV-ready data, or API-driven prospecting.
openclaw skills install @vagif12/mapsdata-google-maps-leadsUse Mapsdata to discover local businesses from Google Maps, run the complete contact-enrichment pipeline, or enrich companies the user already has from business names and website URLs.
Base URL: https://www.mapsdata.io/api/v1
API documentation: https://www.mapsdata.io/docs
MAPSDATA_API_KEY. If it is missing, direct the user to https://www.mapsdata.io/api-access and ask them to set it at runtime.Authenticate every request with:
-H "x-api-key: $MAPSDATA_API_KEY"
Use the smallest workflow that satisfies the request:
POST /searches with enrich_contacts: false. Returns Google Maps business data without contact enrichment.POST /searches with enrich_contacts: true. Discovers businesses and enriches owners, decision makers, emails, phones, social profiles, and verification data.POST /enrichments. Use when the user already has business names and absolute website URLs.Before creating work, call:
curl -sS "https://www.mapsdata.io/api/v1/account" \
-H "x-api-key: $MAPSDATA_API_KEY"
Use credits_remaining and max_results_per_search as the runtime source of truth.
Use the same location catalog as the Mapsdata UI:
curl -sS "https://www.mapsdata.io/api/v1/locations?q=New%20York&country=US" \
-H "x-api-key: $MAPSDATA_API_KEY"
If multiple locations match, ask the user which one they mean. Copy the selected result's label to input.location and country_code to input.countryCode.
When category precision matters, call:
curl -sS "https://www.mapsdata.io/api/v1/categories?q=plumber" \
-H "x-api-key: $MAPSDATA_API_KEY"
Use the selected category's display_name as input.query. Free-text queries remain valid when the user wants a broader search.
Generate one stable Idempotency-Key for the logical job and retain it for retries. Do not create a new key because a request or poll timed out.
curl -sS -X POST "https://www.mapsdata.io/api/v1/searches" \
-H "Content-Type: application/json" \
-H "x-api-key: $MAPSDATA_API_KEY" \
-H "Idempotency-Key: chicago-plumbers-2026-10-01" \
-d '{
"name": "Chicago plumbers",
"input": {
"query": "plumbers",
"location": "Chicago, Illinois",
"countryCode": "US",
"maxResults": 100,
"language": "en"
},
"enrich_contacts": true
}'
Persist the returned job_id. Mapsdata returns 202 Accepted and makes the job visible in the user's dashboard.
Poll every 5 to 10 seconds:
curl -sS "https://www.mapsdata.io/api/v1/searches/JOB_ID" \
-H "x-api-key: $MAPSDATA_API_KEY"
Treat only completed and failed as terminal. Active states can include queued, starting, running, importing, and enriching.
Partial businesses appear before completion:
curl -sS "https://www.mapsdata.io/api/v1/searches/JOB_ID/results?page=1&page_size=500" \
-H "x-api-key: $MAPSDATA_API_KEY"
During a long job, summarize real progress from the status response rather than implying that the job is stuck.
After the job becomes terminal, fetch again from page 1. Increment page until has_more is false, deduplicate by result id, and confirm that the collected count matches total.
Do not report an email as verified merely because it exists. Inspect email_verifications and email_verification_status. Treat invalid addresses as unusable and describe catch-all, risky, or unknown results accurately.
Use this for companies the user already has:
curl -sS -X POST "https://www.mapsdata.io/api/v1/enrichments" \
-H "Content-Type: application/json" \
-H "x-api-key: $MAPSDATA_API_KEY" \
-H "Idempotency-Key: supplied-businesses-2026-10-01" \
-d '{
"name": "Businesses to enrich",
"businesses": [
{
"business_name": "Example Plumbing Company",
"website_url": "https://example.com"
}
]
}'
Requirements:
http:// or https:// company website URL.job_id.GET /enrichments/{job_id} every 5 to 10 seconds.GET /enrichments/{job_id}/results and repeat full pagination after completion./searches/{id} or search jobs through /enrichments/{id}.Use the fields that actually exist instead of inventing aliases:
title, category, categories, address, city, state, postal_code, country_code, rating, review_count, business_status.position, rank, place_id, cid, google_maps_url, claimed.website, phone, additional_phones, phone_types, phone_verifications.owner_name, owner_names, decision_maker_names, verified_owner_names, verified_decision_maker_names.emails, owner_emails, decision_maker_emails, email_verifications, email_verification_status.socials.Standalone enrichment begins with the submitted name and website. Google Maps-only fields can remain null because no Maps discovery was requested.
401: key missing, invalid, revoked, or no longer associated with a user. Stop and ask the user to replace it.402: insufficient credits or inactive subscription. Explain the required and available credits; do not retry unchanged.403: free-plan, plan, or 700-business product limit exceeded. Offer a permitted size.404: job not found for this account or wrong endpoint family. Verify the ID and route.409: idempotency key was reused with a different request. Restore the original body or use a new key only for genuinely new work.422: invalid input, including a search below 100 results. Correct the request before retrying.428: production creation omitted Idempotency-Key. Add the original logical key.429: request or active-job limit reached. Honor Retry-After, then use exponential backoff with jitter.503: required production service unavailable. Retry later with the same creation body and idempotency key.The account-wide request limit is 1,000 requests per rolling 60 seconds across all API keys. There is no separate daily or monthly request cap.
Give the user:
Never initiate outreach, send messages, upload leads to another service, or export private data beyond the requested destination without the user's explicit authorization.
https://www.mapsdata.io/docshttps://www.mapsdata.io/docs/endpoints/create-searchhttps://www.mapsdata.io/docs/reference/data-fieldshttps://www.mapsdata.io/docs/reference/plans-and-creditshttps://www.mapsdata.io/docs/reference/errors-and-rate-limitshttps://www.mapsdata.io/llms-full.txthttps://www.mapsdata.io/pricing.md