Create Google Listing API avatar

Create Google Listing API

Pricing

Pay per usage

Go to Apify Store
Create Google Listing API

Create Google Listing API

Connect a Google account, match its profiles to your locations, and create a Google Business Profile listing for any location that does not have one. The single location tool behind bulk GBP creation.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Categories

Share

Create a Google Business Profile listing for a location that does not have one, connect the Google account it lives under, and match existing profiles to the right locations.

A location in your account and a Google Business Profile are two different things. This Actor is where you join them: connect a Google account, see which of its profiles match which of your locations, link them, and create a fresh Google listing for anything still missing one. It wraps the connected account endpoints of the Listings API.

For hundreds of locations at once, use Create Bulk GBP Listings API instead. This one is the single location tool and the place you get the connected account ID that the bulk Actor needs.

Creation is asynchronous

createGmbListingForLocation answering success: true means the request was accepted, not that the listing is live. Google verifies and provisions on its own schedule. Check the real state later with premiumListingsOfLocation in the Local SEO Analytics API Actor.

What this Actor does

Create a Google listing

  • Creates a Google Business Profile listing for one of your locations, under a connected Google account
  • Creates a location in your account from a Google profile you already own, for the reverse direction

Connect the account

  • Connects a Google account, or a Facebook account
  • Lists the accounts already connected, with status
  • Returns full detail for one connected account and its GMB folders, meaning its location groups
  • Disconnects either provider

Match profiles to locations

  • Lists every profile inside a connected account, so you can see what is available to link
  • Returns suggested profile to location matches
  • Triggers a fresh match run after you add locations or profiles
  • Confirms suggested matches in bulk
  • Links one profile to one location, or unlinks them

Why this comes first

You want toYou need first
Reply to a Google or Facebook reviewThat profile connected and matched to the location
Publish a post to Google, Facebook or InstagramA connected account with at least one matched profile
Read Google, Facebook or Bing performanceThe matching profile connected to the location
Create listings in bulkA connectedAccountId from connectedAccounts here

If an analytics call comes back empty or a reply fails, an unmatched profile is the usual cause. Run connectedAccounts here to check before you go looking anywhere else.

Who this is for

  • Multi location brands standing up Google profiles for stores that never had one
  • Agencies onboarding a client account and linking profiles to locations in one pass
  • Franchise systems auditing which stores are still unmatched
  • Anyone running a nightly check that no profile has silently dropped its connection

What you need

A Listings API account and an API key. Create one at listingsapi.com.

Access levelCovers
ReadconnectedAccounts, connectedAccountDetails, gmbFoldersOfConnectedAccount, connectionSuggestions
WriteCreating listings, connecting, disconnecting and matching

Google and Facebook connections are established through an OAuth grant on the Listings API side. This Actor sends the resulting authorization payload, so complete the OAuth step in your dashboard or your own OAuth flow first, then pass the value through body. The exact payload is documented at docs.listingsapi.com/docs/connected-accounts.

Input

FieldTypeRequiredDescription
apiKeystringYesYour Listings API key. Stored as a secret.
operationstringYesWhich endpoint to call. See the operations table.
pathParamsobjectNoValues for placeholders in the path, for example { "connectedAccountId": "88" }.
queryobjectNoQuery string values such as limit or after.
bodyobjectNoJSON payload for the create, connect and match operations.
paginatebooleanNoKeep requesting pages while pageInfo.hasNextPage is true. Default false.
maxItemsintegerNoStop after this many dataset items. 0 means no limit.

Operations

OperationMethod and pathReturns
createGmbListingForLocationPOST /locations/create/gmb-listingCreates a Google listing for a location
createLocationFromListingPOST /connected-accounts/create-location-from-listingCreates a location from a profile you own
connectedAccountsGET /connected-accountsEvery connected Google and Facebook account
connectedAccountDetailsGET /connected-accounts/{connectedAccountId}/detailsDetail for one connected account
gmbFoldersOfConnectedAccountGET /connected-accounts/{connectedAccountId}/foldersGMB location groups under the account
connectGooglePOST /connected-accounts/connect-googleLinks a Google account
connectFacebookPOST /connected-accounts/connect-facebookLinks a Facebook account
disconnectGooglePOST /connected-accounts/disconnect-googleUnlinks a Google account
disconnectFacebookPOST /connected-accounts/disconnect-facebookUnlinks a Facebook account
connectedAccountListingsPOST /connected-accounts/connected-account-listingsProfiles held inside a connected account
connectionSuggestionsGET /connected-accounts/{connectedAccountId}/connection-suggestionsSuggested profile to location matches
triggerMatchesPOST /connected-accounts/trigger-matchesStarts a fresh match run
confirmMatchesPOST /connected-accounts/confirm-matchesAccepts suggested matches in bulk
connectListingPOST /connected-accounts/connect-listingLinks one profile to one location
disconnectListingPOST /connected-accounts/disconnect-listingUnlinks profiles from locations
allLocationsGET /locationsYour locations, used to look up location IDs
searchLocationsGET /locations/searchLocations matching a search term

Examples

Create a Google listing for one location. Both fields are required:

{
"apiKey": "<your key>",
"operation": "createGmbListingForLocation",
"body": {
"input": {
"locationId": "TG9jYXRpb246MTgwMDI4OQ==",
"connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5"
}
}
}

It answers like this. success means accepted, not live:

{
"clientMutationId": null,
"success": true,
"errors": null
}

Find the connected account ID you need for that call, and for the bulk Actor:

{
"apiKey": "<your key>",
"operation": "connectedAccounts"
}

Connect a Google account with an authorization payload from your OAuth step:

{
"apiKey": "<your key>",
"operation": "connectGoogle",
"body": {
"input": {
"authorizationCode": "<code from the Google OAuth redirect>",
"redirectUri": "https://example.com/oauth/google/callback"
}
}
}

List every profile inside a connected account:

{
"apiKey": "<your key>",
"operation": "connectedAccountListings",
"body": {
"input": { "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5" }
}
}

Review the matches the system suggests before accepting any:

{
"apiKey": "<your key>",
"operation": "connectionSuggestions",
"pathParams": { "connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5" },
"query": { "limit": 50 },
"paginate": true
}

Accept a batch of suggested matches:

{
"apiKey": "<your key>",
"operation": "confirmMatches",
"body": {
"input": {
"connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",
"matches": [
{ "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "listingId": "gmb-a41" },
{ "locationId": "TG9jYXRpb246MTgwMDI5MA==", "listingId": "gmb-a42" }
]
}
}
}

Create a location from a Google profile you already own:

{
"apiKey": "<your key>",
"operation": "createLocationFromListing",
"body": {
"input": {
"connectedAccountId": "4f712c17-4f95-42dd-90f4-97171a2e67b5",
"listingId": "gmb-a44"
}
}
}

A normal onboarding run

  1. connectGoogle to link the account
  2. connectedAccounts to read back its connectedAccountId
  3. connectedAccountListings to see every profile the account holds
  4. triggerMatches to run matching against your locations
  5. connectionSuggestions to review what matched and how confidently
  6. confirmMatches for the ones that look right, connectListing for the rest by hand
  7. createGmbListingForLocation for locations with no Google profile at all, or the bulk Actor if there are many
  8. createLocationFromListing for profiles you own but have no location for yet

After that the review, posting and analytics Actors have live profiles to work with.

Output

Each item becomes one dataset row. A connected account row looks roughly like this:

{
"id": "4f712c17-4f95-42dd-90f4-97171a2e67b5",
"provider": "GOOGLE",
"accountName": "Acme Group",
"email": "ops@acme.com",
"state": "CONNECTED",
"listingCount": 42,
"matchedCount": 39,
"connectedAt": "2026-07-02T11:04:00Z"
}

listingCount against matchedCount is the number to watch. The gap is the set of profiles that will silently do nothing when you try to post or reply.

Exact fields follow the API response. Download the dataset as JSON, CSV, Excel or XML, or read it from the Apify API. The run also writes a SUMMARY record to the key value store.

Running it on a schedule

Run connectedAccounts daily and send the dataset to a webhook that alerts when a state stops reading as connected. Google and Facebook tokens expire, and a broken connection is usually noticed only when a post fails. Run triggerMatches after any batch of new locations so nothing sits unmatched.

Rate limits and pagination

Requests go out one at a time. The Actor reads pageInfo.hasNextPage before fetching the next page, waits out a 429 using retry_after_seconds, and retries server errors with a backoff. Plan limits are 10 requests per minute on Launch and 50 on Growth. See rate limits.

Errors

A non success response stops the run and logs the status, the URL and the response body including the correlation_id. Codes are listed at docs.listingsapi.com/docs/error-codes.

The create and connect endpoints also carry success and errors inside a 200 response, so read those fields on the returned row rather than trusting the status code alone.

Disconnecting an account removes the link, not the profile. The Google or Facebook profile itself stays live and untouched.

Cost

You pay Apify for platform usage of the run. Listing creation, connections and matching are billed by your Listings API plan, which starts at 99 dollars a month with a 14 day trial.