Skip to content

check hundreds of urls at once

shahid ali › tools › bulk url inspection

Bulk Google index checker, without the copy and paste

Search Console will tell you the index status of one URL at a time. This runs the same official URL inspection over a whole list, or a whole sitemap, and gives you a table you can sort, filter and export. No signup, no credits, and no site: guesswork. It is the check I run on client catalogues every morning, rebuilt so you can run it yourself.

  • Nothing is uploaded. Your URLs and results exist in this browser tab and nowhere else.
  • No account here. You sign in to Google, not to me. I never receive the token.
  • Read only. The permission requested cannot change anything in your Search Console.

Run an inspection

  1. Connect

    Sign in with Google. Read only.

  2. Property

    Pick the Search Console property.

  3. URLs

    Paste a list or load the sitemap.

  4. Inspect

    Run the check and export the table.

  1. 01 Connect Search Console

    Read-only access, granted by you to your own account, in a Google popup. The token never leaves this tab.

    not connected
    Advanced: use your own OAuth client ID

    For anyone who would rather not grant access to my app at all. Create a Web application OAuth client in your own Google Cloud project, enable the Search Console API, addhttps://www.shahidali.co as an authorised JavaScript origin, and paste the client ID here. It is held in memory for this tab only.

  2. 02 Pick a property connect first

    Only properties this Google account is verified on will appear.

  3. 03 Choose the URLs connect first

    Where the list comes from

    no URLs loaded

  4. 04 Run it connect first

    Google allows 600 inspections a minute, and that is the real ceiling: 200 URLs cannot finish in under 20 seconds at any setting. Requests are paced automatically to stay under it, so a high setting costs you nothing, it just stops helping once the quota is the bottleneck.

    A failed request is one that never came back with an answer, usually rate limiting or a dropped connection. Those get one more attempt after a short pause. Results Google actually returned are left alone, including unknown to Google: that is an answer, and asking twice only spends quota to hear it again.

Why this is not a site: operator checker

Nearly every tool calling itself a bulk index checker works the same way underneath: it runs a site: or inurl: search for each URL and reads whether anything came back. That is a guess wearing the costume of an answer, and it is the reason this tool does not do it.

  • site: is filtered and sampled. Google's own documentation for the operator says it does not necessarily return all the URLs that are indexed, and that bigger sites should not expect to see all of theirs. A URL can be absent from a site: search while sitting in the index and taking traffic. That is the failure mode that costs money, because it sends you off to fix a page that was never broken.
  • A yes or no is not a status. Even when site: does find the page, it cannot tell you that Google picked a different canonical, when the page was last crawled, or that a noindex tag is the thing holding it out. Those are the answers that decide what you actually do next.
  • This asks Google directly instead. Every row comes from the Search Console URL Inspection API, the same source as the inspection box inside Search Console itself. It is Google's own record of the URL in Google's own wording, which is why a status here can be as specific as duplicate without user-selected canonical rather than a red cross.

The honest trade, because there is one. Inspection reads Google's record for a property, so it only works on properties your Google account is verified on. A site: checker will happily run against any domain on the internet, which is why those tools stay the only option for questions about somebody else's page, checking whether a backlink got indexed being the common one. This tool cannot answer that, and no amount of wanting it to will change what the API returns.

Where your data actually goes

Most bulk checkers ask you to connect Google and then run the requests on their server, which means your property list and results pass through, and usually sit in, somebody else's database. This one does not work that way, because it does not have to.

  1. Google gives the token to your browser

    The sign-in popup is Google's own. The access token it returns is held in a JavaScript variable in this tab. It is never written to storage, never put in a cookie, and never sent to this site.

  2. Your browser calls the API directly

    Every inspection request goes from your machine to googleapis.com and back. This site is a static page: once it has loaded, it is not involved in the conversation at all.

  3. Results stay in the page

    The table is built in memory. Reload and it is gone. The CSV export is assembled in the browser too, so the file never touches a server on the way to your downloads folder.

One honest exception, and it applies to sitemap mode only. A browser is not allowed to read another site's sitemap, and in practice no site permits it, so sitemap XML is fetched by a small reader on this domain that returns the file and keeps no copy of it. It writes no log line, and no Google token and no inspection result ever reaches it: the only thing it sees is a sitemap address that is already public. Paste mode contacts no server at all, and is there for anyone who wants the stronger guarantee. Full detail on the privacy page.

What each status actually means

The tool reports Google's own coverage wording and maps it to plain language. Where a status has a real fix behind it, the guide is linked.

StatusWhat it means
indexedGoogle has this page in its index. It can rank.
crawled, not indexedGoogle fetched the page and chose not to keep it. Usually a value judgement, not a technical fault. Read the guide.
discovered, not indexedGoogle knows the URL exists but has not crawled it yet. Often a crawl budget or site load signal. Read the guide.
unknown to GoogleGoogle has no current record of this URL. Either it was never discovered, or it was crawled long ago and has been let go. Read the guide.
page with redirectThis URL redirects elsewhere, so the destination is what gets indexed.
noindex tagA noindex directive is telling Google to keep this page out. Intentional on some pages, fatal on others.
duplicateGoogle picked a different canonical. Your version is treated as a copy.
alternate with canonicalThis page points at another canonical, and Google agreed. Normal for variants and paginated pages.
not found (404)The URL returns 404. If it should exist, that is the bug to fix before anything else.
soft 404The page returns 200 but looks empty or like an error to Google.
blocked by robots.txtrobots.txt is stopping the crawl. Google cannot judge a page it is not allowed to fetch. Read the guide.

The limits, stated plainly

  • 2,000 inspections per property per day. That is Google's cap, not mine. Bigger catalogues get split across days, which is exactly how the real work goes.
  • Verified properties only. If your Google account is not verified on the property, it will not appear in the dropdown, and no amount of pasting URLs will change that.
  • It cannot request indexing. The API is read only. Submitting a URL still means the button in Search Console, roughly a dozen a day, by hand. That limit is the whole reasonthe request indexing question is worth reading.
  • 600 inspections a minute is the speed limit. That works out at ten a second, so a list of 200 cannot finish in under twenty seconds however hard you push it. The tool paces itself to stay under the limit rather than collecting rate-limit errors, which is why raising the concurrency setting stops making any difference past a point.
  • Need the percentage instead of the rows? Thesitemap coverage checker runs the same API over a whole sitemap and rolls it up into one number, with a per-sitemap breakdown for sitemap indexes.

Why this exists

I check index status for a living. One store's catalogue took1,006 submissions across 118 days, and none of that is possible without first knowing, every morning, which URLs are actually in the index. The private version of this tool has been running against client properties for months. This is the same logic, minus the parts that touch my accounts, given away because the alternative is watching people pay monthly for a status check they can do themselves. The longer version, including the bug in my own code that reshaped it, is in why I gave away the index checker.

If the answer turns out to be that a lot of your catalogue is not indexed, that is the point where the work starts rather than ends. The case studies show what the fixing looks like on real sites, and the indexing service is there if you would rather hand it over.

Straight answers

Is this bulk index checker really free?

Yes, and there is nothing to buy later. No account, no credits, no URL cap of my own, no email collected. The only ceiling is Google's own quota, which applies to your property rather than to this page. I give it away because the alternative is watching people pay a monthly subscription for a status check they can run themselves in a browser tab.

Do I need to install a Chrome extension?

No, and that is deliberate. Extension tools like GSCTool work by automating clicks inside your open Search Console tab, which means installing software and letting it drive your signed-in session. This page asks the same official URL Inspection API directly from the browser: nothing installed, nothing driving your account, nothing to update or uninstall later. If you are weighing the paid indexing tools against each other, I compared them honestly in the indexing tools comparison.

How many URLs can I check at once?

As many as you like in one paste, and the run will work through them at up to 2,000 inspections per property per day, which is Google's limit rather than mine. Large lists simply continue the next day. A sitemap of any size can be loaded the same way, and the tool tells you how many URLs it found before it spends any quota on them.

Does a site: search show everything Google has indexed?

No, and this is the single most expensive misunderstanding in indexing work. Google's own documentation for the operator says it does not necessarily return all the URLs that are indexed, and that bigger sites should not expect to see all of theirs. A URL can be missing from a site: search while being indexed and taking traffic. That is why this tool asks the URL Inspection API instead, and why it can tell you which canonical Google picked rather than just a yes or a no. There is a full breakdown in is the site: operator accurate.

Can you see my Search Console data?

No. The permission is granted by you to a Google app registration, and the token Google returns goes to your browser. There is no server of mine in the request path, no login here, and nothing to retrieve later. You can revoke access at any time in your Google account permissions, and the Disconnect button does it immediately.

Why does it say a page is unknown to Google when I can see it in search?

Almost always the wrong property or the wrong URL form. Inspection is exact: a URL prefix property only answers for URLs under that exact prefix, and http, https, www and non-www are four different things. The tool filters out URLs that do not belong to the selected property before spending quota on them. Past that, treat the answer as real: unknown to Google is a result, not a glitch, and the tool does not re-ask in the hope of a nicer one.

Does a higher concurrency setting make it faster?

Up to a point, then it stops mattering. Google allows 600 inspections a minute, so once you are pushing ten requests a second the quota is the bottleneck rather than the setting, and the tool paces itself there instead of piling up rate-limit errors. Six is a sensible default. Going to twenty helps on long lists where individual responses are slow, and does nothing on short ones.

Can I use it without granting access to your app?

Yes. Open Advanced under step one and paste your own OAuth client ID from your own Google Cloud project. The tool then talks only to your registration, and my name is nowhere in the flow.

Found more red than you expected? Send me the export on WhatsApp and I will tell you what the pattern is, free, before anyone talks about money.