Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
FREEDOM251

Freedom251 › Blog › 403 errors

Google Indexing API 403 and permission errors: service-account troubleshooting

By Freedom251 Team · · 8 min read

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A Google Indexing API 403 is usually caused by one of four mismatches: the API is disabled in the Cloud project, the service account is not an owner of the exact Search Console property, the OAuth token lacks the https://www.googleapis.com/auth/indexing scope, or Google Cloud IAM is denying the principal. A service-account JSON key by itself does not prove ownership of a site.

What the Indexing API requires before a request can succeed

Every publish or removal request has to pass several independent checks. Fixing one does not compensate for a failure in another. The complete setup is:

As an Amazon Associate I earn from qualifying purchases.

  • A Google Cloud project associated with the credentials.
  • The Indexing API enabled in that project.
  • A service account whose identity is the one actually used to mint the token.
  • Search Console ownership for the target site, with that service-account email added as a delegated owner of the relevant property.
  • An OAuth 2.0 access token issued with the exact scope https://www.googleapis.com/auth/indexing.
  • A supported request containing a valid URL and either URL_UPDATED or URL_REMOVED.

Google describes the authentication requirement this way: every call must be authenticated with an OAuth token obtained in exchange for the service account’s private key. The key file identifies the account; it does not grant that account access to a Search Console property.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Read the 403 message before changing anything

The error text usually tells you which layer rejected the request. Capture the complete HTTP response, including the JSON error object, rather than troubleshooting from the status code alone.

#1 Best Overall
Sale
TOZO A1 Wireless Earbuds Bluetooth 5.3 Light Weight in Ear Headphones | IPX5 Waterproof,2 Mics for AI Calls,Immersive Premium Sound Bass Headset with Charging Case,32 EQ via App Black
  • [Ultra-Lightweight Ear Buds Designed for Small Ears] Each earbud weighs only 3.7g and features a compact, ergonomic in-ear design made especially for small ears. Secure, low-profile, and comfortable for workouts, all-day wear or overnight sleeping.The ultra-slim profile sits flush in your ear with no hard edges poking or rubbing, so you can even sleep on your side without discomfort.
  • [Immersive Stereo Sound with TOZO OrigX Technology] TOZO OrigX tuning delivers clear vocals, balanced mids, and natural stereo sound for music, podcasts, and videos.
  • [Long Battery Life for Daily Use] Get up to 7 hours of playtime on a single charge, with up to 32 hours total using the charging case—ideal for workdays, commuting, and extended listening sessions.
  • [Bluetooth 5.3 & Stable Connection] Bluetooth 5.3 provides fast pairing, stable wireless performance, and reduced dropouts as you move around home or office.
  • [Deep Bass with Clear Vocals] High-performance drivers produce punchy bass while keeping vocals clean and detailed for everyday listening.
Error or symptom Most likely layer What to check first
accessNotConfigured Cloud project and API configuration Confirm that the project tied to the service-account credentials has the Indexing API enabled and that your application is using that same project.
Permission denied. Failed to verify the URL ownership. Search Console ownership or property matching Add the exact service-account email as a delegated owner and confirm that the submitted URL belongs to that Domain or URL-prefix property.
Account deleted, disabled, or unverified Credential or service-account state Check the account in Google Cloud, make sure it is active, and verify that the token is being minted from the intended key.
A generic Cloud IAM permission denial IAM policy or resource eligibility Inspect the principal, required permission, allow bindings, deny policies, and whether the target resource supports the operation.
HTTP 400 for URL or notification type Request format, not authorization Validate the URL and use only the documented notification types, URL_UPDATED or URL_REMOVED.

A 403 is not evidence that the URL itself is malformed. Malformed URLs and unsupported notification values normally produce a 400-level validation response, so solve authorization first only when the response identifies authorization or ownership.

Step 1: confirm the Cloud project and enable the Indexing API

Identify the project actually used by the credentials

Open the service-account JSON file and note its client_email and project fields. The project named there is a useful starting point, but your code can still select a different project when it creates credentials or configures a client. Compare the project shown in your application configuration with the project in Google Cloud Console.

For a service account, the email normally follows the form [email protected]; the exact account and project names vary. Do not assume that a key downloaded from one project is using the project currently selected in the console.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Enable the API in that project

  1. In Google Cloud Console, select the project associated with the service-account credentials.
  2. Open APIs & Services, then Library.
  3. Find Indexing API and select Enable. If the page offers Manage rather than Enable, it is already active.
  4. Re-run the request with a newly minted token after the change.

If the response is accessNotConfigured, changing Search Console users will not fix it. The API activation and the project selected by the request must agree.

Step 2: prove which service-account identity is calling

Use the client_email value from the same JSON key that your program loads. Compare it character for character with the address entered in Search Console. A different key, an environment variable pointing at another file, or a workload identity that impersonates another account can make a correctly configured account appear unauthorized.

Rank #2
Sale
Smart Watch for Men Women Compatible with iPhone Samsung Android Phone 1.69 inch Full Touch Screen IP68 Waterproof Bluetooh Fitness Tracker Heart Rate/Sleep Monitor (Black)
  • 【IP68 Waterproof Multifunctinal Smart Watch】Torjalph fitness activity tracker smart watch is IP68 waterproof technology ,you can wear it when swimming,handwashing,it's rain-proof which means that you perform multiple exercise modes outside without worrying about sweat or rain corroding your fitness smart watch,and this watch equipped with a 230 mAh large capacity battery magnetic charging ,and this sports activity tracker watch can be used 5-7 days If fully charged.
  • 【Larger 1.83'' Full Screen Watch & Multi-dial Selection】1.83 inch full HD color touch screen smart watch for men / women provides excellent 240*284 resolution image quality ,This Bluetooth smart watch offers a better touch experience and remarkable immersion and ,more than 200 watch faces for you to choose from App"Da Fit ", you can change the dial style according to your mood to wear keeping the world on your wrist
  • 【Accurate Activity Tracker Smart Watch 】sports watch activity tracker uses sweat and dust resistant breathable silicone strap, our Fitness Tracker Smart Watch for Android iOS Phones supports 12 sports modes,walking,running,bicycle,swimming,badminton,basketball,football,rope skipping. This bluetooth calls smart watch for men women is lightweight and stylish, bringing more convenient and relaxing sports experience while also providing more protection.
  • 【Your 24 Hour Personal Daily Health Monitor】Fitness watch for women men full touch screen IP67 waterproof bluetooth smartwatch for Android iOS Phones with heart rate blood pressure monitor multifunction Andriod smart watch with steps counter sleep monitor sports fitness watch, monitoring blood oxygen saturation allows you to understand your physical condition in real time to track fitness progress ,to know your health status in time.
  • 【More Functions Bluetooth Call Smart Watch】This fitness activity smart watch full screen for iPhone and Android phones includes a bunch of new features including:The bluetooth smart watch can hang up the phone, receive and display WhatsAPP /Text /Facebook /Twitter /Messenger reminder.Support sedentary reminder, alarm clock, stopwatch, timer,weather information,music control, remote camera control compatible with Android 5.0 and above or iOS 9.0 and above smartphones.

Common identity mix-ups

  • The key belongs to a staging project while the Indexing API was enabled only in production.
  • A deployment uses a default runtime service account instead of the account represented by the local JSON key.
  • The email was copied with a trailing space or the wrong project name.
  • A rotated or revoked key is still referenced by the application.

Log the non-secret identity (the service-account email and project ID) at startup. Never log the private key, refresh token, or complete access token.

Step 3: add the account as a delegated owner in Search Console

Use the exact property that contains the submitted URL

First verify the site in Search Console. Then open the property’s Settings, choose Users and permissions, and add the service-account email with the Owner permission. Google refers to this as adding a delegated owner.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The property must cover the URL you send:

  • A Domain property covers the verified domain and its protocol and subdomain variants according to Search Console’s domain verification rules.
  • A URL-prefix property covers only URLs under its exact protocol, host, and path prefix. For example, a property beginning with https://www.example.com/ does not automatically cover http://example.com/ or a different subdomain.

Ownership of a related property is not enough. If the account owns https://www.example.com/ but the request sends a URL on https://shop.example.com/, or sends an HTTP URL to an HTTPS-only URL-prefix property, the API can return Permission denied. Failed to verify the URL ownership.

Check the invitation and effective permission

  1. Confirm that the email in Users and permissions exactly matches client_email.
  2. Make sure the account is listed as an owner, not merely as a restricted or full user.
  3. Verify the property selector in Search Console before copying the URL into your request.
  4. Allow a short propagation interval, then mint a fresh token and retry.

A valid JSON key can authenticate the caller while ownership verification still fails. Authentication and authorization are separate checks.

Step 4: mint an OAuth token with the required scope

The Indexing API requires OAuth 2.0 and the exact scope https://www.googleapis.com/auth/indexing. An access token issued for another Google API, an API key, or an unscoped service-account credential will not satisfy this requirement.

Rank #3
Sale
New Bee Guitar Cable 10ft Electric Instrument Bass AMP Cord | 6.35mm Jack, Durable Design, Stage and Home Studio Use, Low Noise Shielded Electric Cord for Bass, Keyboard, Amp, Mixer
  • [Low Noise High Fidelity] New bee guitar cord with 22AWG oxygen-free-copper center conductors provides enhanced signal transfer, the PVC insulation material and the high-density stranded copper double shield provide noise rejection for quiet operation
  • [Ideal for Choice] New bee 1/4 straight and right angle metal connectors, ensures a secure connection in any instrument, pedal, or amp jack. L shape great fro on stage guitar stands
  • [Wide Compatible] Suitable for mixer, power amplifier, microphone, effector, decoder, equalizer, electoronic organ, electric guitar, electric bass and other electronic equipments. Widely used in the installation of smart home, karaoke speaker, professional stage audio, etc
  • [Easy Disassemble] Making incidental repairs quick and easy! Very nice, flexible cable
  • [Dont Hesite to Order] 24 hours customer services and professional technology team are standing by

Use a Google-supported client library

Google recommends client libraries because they handle JWT signing, token exchange, expiration, and refresh details that are easy to implement incorrectly. A minimal Python example using a service-account key is:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
from google.auth.transport.requests import Request
from google.oauth2 import service_account

SCOPES = ["https://www.googleapis.com/auth/indexing"]
credentials = service_account.Credentials.from_service_account_file(
    "service-account.json",
    scopes=SCOPES,
)
credentials.refresh(Request())
print(credentials.token)

Use the resulting bearer token in the authorization header of the documented Indexing API publish method. Do not paste the token into source control or a ticket. Tokens expire; if a long-running process receives an authorization failure after working earlier, refresh the credentials rather than reusing an old token.

Verify the token without exposing it

  • Confirm that the credential object was created from the intended key file.
  • Inspect the credential’s configured scopes in application diagnostics, but do not print the full token.
  • Check the token’s expiration time and refresh it before sending a request when necessary.
  • Ensure the HTTP request sends Authorization: Bearer <access-token>.

Every request must carry an authorization token. Supplying the scope during credential creation is not enough if the application later sends a request without the bearer header.

Step 5: send a supported notification request

Once project, ownership, and token checks pass, use the documented Indexing API publish method. The request body contains a single URL and a notification type. The supported values are:

Field Accepted value or requirement Typical use
url A complete, valid URL that belongs to the owned Search Console property The canonical page address being notified
type URL_UPDATED Tell Google that a URL’s content or availability changed
type URL_REMOVED Tell Google that a URL was removed

Keep the authorization diagnosis separate from payload validation. If the API returns a 400 after you fix the 403, inspect URL syntax, encoding, and the notification value instead of changing IAM permissions.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
BSIMB 15.6" Digital Family Calendar & Chore Chart, No Subscription Fees
  • Digital Family Calendar: BSIMB digital calendar wall touch screen puts an end to your chaotic life. Designed for busy families, the digital calendar keeps you organised and in step with your family. Assign different colours and tasks to each family member to make family scheduling easier and more intuitive.
  • Easy Setup and Auto-Sync: Plug in, connect to WLAN and auto-syn your electric calendar in minutes. Digital wall calendar compatible with Google calendar, iCloud calendar, Outlook calendar, Cozi calendar and Yahoo calendar. Add events directly on the device or through the ecalendar app. Electronic calendar stays current whether you're at work or traveling—no manual updates needed.
  • All-In-One Home Assistant: Smart calendar builds habits and encourage independence with personalised chores. Display daily meal plan to reduce the daily ‘What's for dinner?’ stress. To-do lists keep track of everything you want. Turning chores into valuable achievements with stars and rewards, making life easier and more enjoyable.
  • Manage Anytime Anywhere: BSIMB electronic calendar for family stay connected with the powerful ecalendar app. Access and manage your digital wall calendar anytime, anywhere with free features like stars & rewards, photo screensaver, chore charts, meals plans, to-do lists etc. Electronic planner paid features like Magic Import tailor advanced tools for users with special needs.
  • Stay in Touch with Loved Ones: Share photos or videos from your phone to electronic wall calendar with app, instantly update your life moment, and keep in touch with your family, especially those who are far away; you can also surprise your smart calendar digital wall by sending him a wish card; it's also great for keeping tech-illiterate elders in touch with the youngsters.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Step 6: investigate generic Google Cloud IAM 403s

Not every 403 comes from Search Console’s ownership check. A generic Cloud IAM denial can mean that the caller lacks an allow-role permission, a deny policy blocks the operation, or the resource is not eligible for that operation.

Inspect the principal

Use the identity shown by your runtime, not the account you intended to use. For local development this is often the service-account email in the key file; for a managed runtime it may be a different service account or an impersonated principal.

Inspect allow and deny policies

  • Review IAM bindings on the project and any parent or related resource.
  • Check whether an organization or project deny policy explicitly blocks the required permission.
  • Look for conditional bindings whose resource, time, or principal conditions are not met.
  • Confirm that the target resource is eligible for the API operation and has not been deleted or disabled.

Grant only the permission required by the documented operation. Broad, unrelated administrator roles can hide the real problem and create unnecessary exposure.

A repeatable 403 troubleshooting checklist

  1. Copy the complete error message and identify whether it says accessNotConfigured, ownership verification failure, account state failure, or a generic IAM denial.
  2. Record the Cloud project ID and service-account client_email used by the running application.
  3. In that project, confirm that the Indexing API is enabled.
  4. In Search Console, open the exact Domain or URL-prefix property that contains the submitted URL.
  5. Confirm that the same service-account email is a delegated owner of that property.
  6. Mint a new OAuth 2.0 token with https://www.googleapis.com/auth/indexing.
  7. Verify that the request includes the bearer token and a supported notification type.
  8. If the response remains a generic IAM denial, inspect principals, allow bindings, deny policies, and resource eligibility.
  9. After each change, retry one controlled URL and save the response so you can tell which change resolved the failure.

Frequent mistakes and their fixes

“The key is valid, so ownership should work.”

A key proves that the application can act as the service account. It does not associate that account with a Search Console property. Add the account as a delegated owner.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

“The account owns the domain, but the API still rejects the URL.”

Check the property type and URL details. Protocol, hostname, subdomain, and path-prefix differences matter for URL-prefix properties.

“I enabled the API, but I still receive accessNotConfigured.”

Compare the project selected in Cloud Console with the project and credentials used at runtime. Enabling the API in a different project has no effect.

“I added the account but reused the old token.”

Refresh the OAuth credentials and send the new bearer token. A token issued before a permission change may not reflect the current authorization state.

“I changed IAM roles for a 400 error.”

Return to the payload. A malformed URL or unsupported notification type is a request-validation problem, not proof that the service account lacks permission.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What a successful diagnostic result looks like

You have isolated the configuration when all four identities line up: the Cloud project that has the API enabled, the service account named in client_email, the Search Console property where that account is a delegated owner, and the URL submitted in the request. The token then carries the exact Indexing scope and the request uses one of the two supported notification types. If those conditions are true and a generic 403 remains, the remaining investigation belongs in Cloud IAM policy and resource eligibility rather than Search Console ownership.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

403 errorsGoogle Cloud IAMGoogle Indexing APIGoogle Search ConsoleOAuth 2.0service accounts

Leave a Reply

Your email address will not be published. Required fields are marked *

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.