crawl-census
crawl-census-client
取得する前に確認を。 クローラーが閉じたドアにリクエストを浪費するのを防ぎ、誰かが販売しようとしているコンテンツを迂回してしまうのを防ぐ、ドロップインクライアント。
robots.txt を読むことは、1つの質問に答え、2つの質問を隠すことです。Crawl Census による 23,482 ドメイン の測定結果:
2,874 ドメインが robots.txt で AI エージェントを許可し、その後ネットワークエッジで同じエージェントを拒否しています。 パーサーは許可を見ます。フェッチは 403 を返します。往復のコストを払って何も得られません。
208 ドメインが AI ユーザーエージェントに
HTTP 402 Payment Requiredで応答します。 それは価格であり、拒否ではありません。それをブロックとして扱うと、運営者が販売したいコンテンツから離れてしまいます。それを迂回して再試行すると、課金されているものを取得することになります。
依存関係なし。キー不要。
MCP サーバー
同じ測定結果がリモート MCP サーバーとして公開されており、エージェントは失敗した後にではなく、取得する前に確認できます。公式 MCP レジストリ に io.github.taylorsmithgg/crawl-census として登録されています。
{ "mcpServers": { "crawl-census": { "url": "https://crawlcensus.com/mcp" } } }ツール | 回答 |
| これらのドメインは私のエージェントにサービスを提供するか、拒否するか、課金するか? |
| このセンサスは私のクローラーについて何を公開しており、どう修正するか? |
| 分母と引用行付きの日付入りレコードとしての主要な調査結果 |
| 1つのドメインの保存された監査 |
| 今すぐドメインを測定する |
| コーパス全体の合計 |
読み取りツールに認証は不要。Streamable HTTP。
Related MCP server: Maango-mcp
インストール
npm i github:taylorsmithgg/crawl-census-client
pip install git+https://github.com/taylorsmithgg/crawl-census-client使用方法
import { politeFetch } from "crawl-census-client";
const r = await politeFetch("https://example.com/", { agent: "gptbot" });
if (r.skipped) console.log(r.verdict, r.reason); // disallow | refuse | pay
else process(await r.response.text());from crawl_census import polite_fetch
r = polite_fetch("https://example.com/", agent="gptbot")
if r.skipped:
print(r.verdict, r.reason)
else:
process(r.body)スキップは例外として送出されるのではなく、返されます。これはウェブの大部分にとって正常な結果であり、クロールループはすべての URL の周りに try/except を置かずにスキップを数えられるべきです。
クロール前にキューを分割する
ホストごとに1回ではなく、1,000 ドメインにつき1回の呼び出し:
const { crawl, skip, pay, unknown } = await partition(urls, { agent: "gptbot" });p = partition(urls, agent="gptbot")
p.crawl, p.skip, p.pay, p.unknownまたは単にファイルを取得する
メモリ内の拒否リストだけが必要なフェッチャーには、ドメインごとの呼び出しを完全にスキップします:
curl https://crawlcensus.com/agents/gptbot/blocklist.txt # one domain per line, commented headerconst sync = await syncBlocklist("gptbot"); // full list once
if (sync.blocked.has(host)) skip();
setInterval(() => sync.refresh(), 3600_000); // then deltas only, a few hundred bytessync = BlocklistSync("gptbot")
if host in sync: skip()
sync.refresh() # {'added': 3, 'removed': 1, 'size': 3310, 'cursor': ...}デルタフィードは https://crawlcensus.com/agents/<agent>/changes.json?since=<unix> で、各レスポンスは next_since を運びます。そのため、長時間実行されるクローラーは、リストを再ダウンロードする代わりに、1時間あたり数百バイトで最新の状態を維持できます。
そのファイルは robots.txt のみ を対象としています。エッジ拒否と HTTP 402 はリクエストごとの動作であり、依然として preflight または politeFetch が必要です。
クロールがセンサスに掛かるコスト
主張ではなく測定。20 ホストの並行フェッチは、かつては各1ドメインを運ぶ20回の preflight 呼び出しに相当しました。同じホストを3回同時に要求すると、最初のルックアップが解決した後にのみキャッシュが機能するため、3回のコストがかかりました。匿名の許容量は1時間あたり240回の呼び出しであり、1回の呼び出しで25ホストをカバーできる場合、クローラーは240ホストで上限に達しました。
politeFetch は現在、作業を自動的に共有します: 同じティックで発行されたルックアップは1つのバッチ呼び出しとして送信され、同じホストへの並行ルックアップは単一のリクエストを待機します。
パターン | 以前 | 現在 |
20 ホスト、並行 | 20 呼び出し | 20 の1呼び出し |
1 ホスト、3 URL、並行 | 3 呼び出し | 1 呼び出し |
60 ホスト、並行 | 60 呼び出し | 3 呼び出し (25 / 25 / 10) |
| 2 呼び出し | 1 呼び出し |
batchSize のデフォルトは 25 で、キーなしでの呼び出しあたりの上限です。Pro または Data キーで引き上げます。batchWaitMs は、一度にではなく波状に到着する並行処理のための合体ウィンドウを広げます。デフォルトのゼロは次のティックでフラッシュします。
オリジンが価格を示す場合の支払い
pay 判定は、オリジンが金額を指定した場合にその金額を運びます:
const r = await politeFetch(url, { agent: "claudebot" });
if (r.verdict === "pay") console.log(r.price); // "USD 0.5", or null if none was quoted知っておくべきことが2つあります。HTTP 402 で応答するほとんどのオリジンは金額をまったく指定しないため、price は通常 null であり、取り決めはバンド外で行う必要があります。また、価格設定はクローラーごとです: 測定されたコーパス全体で、213 の課金オリジンのうち 78 は一部のエージェントに課金し、他のエージェントには無料でサービスを提供します。そのため、リスト上のドメインがあなたに課金するだろうと想定するのではなく、自分のトークンで問い合わせてください。
2種類の不明
partition は作業キューを crawl、pay、skip、unknown、undecidable に分割します。
最後の2つは似ていますが、同じではありません。unknown は、センサスがそのドメインをまだ測定していないことを意味します: それを送信すると、次のパスで実際の判定が得られます。undecidable は、サイトの robots.txt が CrawlCensusBot を許可しないことを意味するため、このセンサスはそれを決して測定しません — 再試行は保証された無駄であり、毎パスで不明を再送信するループはそれらを永遠に再送信することになります。サーバーは measurable ブール値で違いをマークします。reason の散文ではなく、それを読んでください。
const p = await partition(urls, { agent: "gptbot" });
await Promise.all(p.crawl.map(politeFetchOne));
if (p.unmeasured.length) await submitUnmeasured(p, { agent: "gptbot" });
// p.undecidable: read their robots.txt yourself. Asking us again cannot help.送信は意図的に別の呼び出しです。ルックアップとして読めるものの間に静かに POST するライブラリは悪い市民であり、キュー位置がいつ使われるかを選択すべきです。
あなたにサービスを提供しないすべてをスキップする
拒否リストは小さい方の半分です。ライブセンサスに対して測定すると、robots の不許可のみをスキップするクローラーは、robots.txt で許可しながらエッジで拒否するドメイン、または HTTP 402 で応答するドメインに対して、1パスあたり約 2,900 リクエストを依然として費やします — PerplexityBot の場合、そのセットは拒否リストよりも大きいです。それらのフェッチは何も返さず、それぞれ往復のコストがかかります。
const skip = await syncSkipList("gptbot");
if (skip.has(host)) continue; // disallowed, refused at the edge, or priced
skip.why(host); // "disallow" | "pay" | "refuse" | null
setInterval(() => skip.refresh(), 3600_000);エージェント | 拒否リスト | 追加でスキップ可能 | 合計 |
GPTBot | 3,542 | 2,944 | 6,486 |
ClaudeBot | 3,169 | 3,194 | 6,363 |
PerplexityBot | 1,128 | 3,658 | 4,786 |
3つのセットは内部的に分離されているため、変更はそれが属するセットを移動します。why() は preflight と同じ優先順位に従います: 不許可は価格よりも優先されます。なぜなら、価格は許可ではないからです。
拒否リストを最新に保つ
syncBlocklist / BlocklistSync はリストを一度ダウンロードし、その後は変更されたものだけを適用します。
リストは、それが構築された変更フィード内の正確な位置とともに、x-cursor ヘッダーと # cursor: コメントで提供されます。クライアントはそれを読み、そこから再開するため、スナップショットと最初のポーリングの間にギャップはなく、サーバーと同期した時計に依存することもありません。秒単位のポーリングは秒内の位置を表現できず、クロールバッチは1秒に数十のイベントを書き込むため、秒単位の再開はその残りを落とす可能性があります: ライブで測定すると、同じ秒の3つの変更の最初の後に再開すると、カーソルでは両方の兄弟が回復しましたが、秒ではどちらも回復しませんでした。
const sync = await syncBlocklist("gptbot"); // cursor comes from the list itself
if (sync.blocked.has(host)) skip();
setInterval(() => sync.refresh(), 3600_000); // a few hundred bytes per pollrefresh() は robots の遷移のみをリストに適用します。なぜなら、リストはそれで構成されているからです。エッジ拒否、新しい価格、llms.txt の変更は、別途対応するために other で返されます — 以前のバージョンはそれらのドメインを拒否リストから削除したため、クローラーは拒否し始めたばかりのものを正確にフェッチを再開しました。
判定
各判定の権威ある定義 — それが何を意味するか、クローラーに何を義務付けるか、再度問い合わせることで変わる可能性があるか — は /api/v1/verdicts でデータとして公開されています。以下のリストは要約です。両者が矛盾する場合、エンドポイントが正しく、このファイルは古いものです。
politeFetch はデフォルトで disallow、refuse、pay をスキップします。これはエンドポイントの派生 do_not_fetch セットです。ここでのコピーは意図的です — クロールループは決定するためにネットワーク呼び出しを必要とすべきではありません — そしてテストが両者を比較するため、気付かれずにドリフトすることはありません。
判定 | 意味 | デフォルトの動作 |
| robots.txt はこのエージェントを許可し、そのユーザーエージェントを運ぶライブリクエストがサービスされた | フェッチ |
| robots.txt はサイトルートでこのエージェントを禁止する | スキップ |
| robots.txt は許可する。エッジはとにかく拒否した。許可は本物ではない | スキップ |
| オリジンは HTTP 402 で応答した。商業条件でこのエージェントにサービスを提供する | スキップ |
| 回答するほど最近測定されていない | フェッチ |
onPay: "fetch" (on_pay="fetch") はペイウォールのデフォルトを上書きします。これは明示的なオプトインであり、paidRouteOverridden として結果に記録されるため、ログに表示されます。
劣化しても失敗しない
センサスに到達できない場合、すべての判定は unknown になり、クロールは通常どおり進行します。サードパーティの障害がパイプラインを止めてはなりません。まさにこのためのライブテストがあります。
私たちがあなたのエージェントについて公開するもの
const p = await agentProfile("claudebot");
// robots disallow rate, edge refusal rate, operator page, correction channel数値が間違っている場合、修正チャネルはそのレスポンスとオペレーターページにあります。レジストリの事実は議論なしに修正されます。争われた測定値は、静かに修正されるのではなく、基礎となるスキャンレコードとともに論争と並べて公開されます。
制限
匿名での preflight 呼び出しあたり 25 ドメイン、Pro キーで 200、Data キーで 1,000。apiKey を渡します。詳細は https://crawlcensus.com/for-crawlers。
テスト
node test.mjs は意図的にライブセンサスに対して実行されます。このクライアントの価値は、その判定が現実と一致するかどうかであり、モックされたテストはモックが自分自身と一致することを主張するだけです。
MIT。データは CC BY 4.0、帰属は「Source: Crawl Census (crawlcensus.com)」。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceURL intelligence for AI agents. One URL in, structured security and data quality signals out across 7 dimensions. 13 tools, risk score 0-100 with 23 configurable weights.161601MIT

Maango-mcpofficial
AlicenseAqualityCmaintenanceMaango is the pre-flight check for AI agents on the web. Before an agent scrapes, summarises, trains on, or searches a site, it calls Maango and gets back whether the action is allowed for that domain, along with the reason and the policy signals that decided it.71MIT- AlicenseAqualityAmaintenanceEnables AI agents to check URL safety before fetching content, using Google Web Risk, URLhaus, PhishTank, and AI analysis to return SAFE/SUSPICIOUS/DANGEROUS verdicts.13651MIT
- AlicenseAqualityAmaintenanceEnables AI agents to check whether a public website is crawlable, understandable, and ready for AI search workflows through local-only audits of robots.txt, sitemaps, metadata, and llms.txt.3511MIT
Related MCP Connectors
Domain & company intel for AI agents: RDAP, DNS, email deliverability, tech stack. No API keys.
Domain intel for AI agents: RDAP registration, DNS, email deliverability, tech stack.
URL intelligence for AI agents and developers. 16 tools, 25 signal weights, 20 free checks.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/taylorsmithgg/crawl-census-client'
If you have feedback or need assistance with the MCP directory API, please join our Discord server