Skip to main content
Glama

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" } } }

ツール

回答

crawl_preflight

これらのドメインは私のエージェントにサービスを提供するか、拒否するか、課金するか?

agent_profile

このセンサスは私のクローラーについて何を公開しており、どう修正するか?

census_facts

分母と引用行付きの日付入りレコードとしての主要な調査結果

site_report

1つのドメインの保存された監査

scan_site

今すぐドメインを測定する

census_stats

コーパス全体の合計

読み取りツールに認証は不要。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 header
const sync = await syncBlocklist("gptbot");   // full list once
if (sync.blocked.has(host)) skip();
setInterval(() => sync.refresh(), 3600_000);  // then deltas only, a few hundred bytes
sync = 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)

partition してからフェッチ

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 は作業キューを crawlpayskipunknownundecidable に分割します。

最後の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 poll

refresh() は robots の遷移のみをリストに適用します。なぜなら、リストはそれで構成されているからです。エッジ拒否、新しい価格、llms.txt の変更は、別途対応するために other で返されます — 以前のバージョンはそれらのドメインを拒否リストから削除したため、クローラーは拒否し始めたばかりのものを正確にフェッチを再開しました。

判定

各判定の権威ある定義 — それが何を意味するか、クローラーに何を義務付けるか、再度問い合わせることで変わる可能性があるか — は /api/v1/verdicts でデータとして公開されています。以下のリストは要約です。両者が矛盾する場合、エンドポイントが正しく、このファイルは古いものです。

politeFetch はデフォルトで disallowrefusepay をスキップします。これはエンドポイントの派生 do_not_fetch セットです。ここでのコピーは意図的です — クロールループは決定するためにネットワーク呼び出しを必要とすべきではありません — そしてテストが両者を比較するため、気付かれずにドリフトすることはありません。

判定

意味

デフォルトの動作

allow

robots.txt はこのエージェントを許可し、そのユーザーエージェントを運ぶライブリクエストがサービスされた

フェッチ

disallow

robots.txt はサイトルートでこのエージェントを禁止する

スキップ

refuse

robots.txt は許可する。エッジはとにかく拒否した。許可は本物ではない

スキップ

pay

オリジンは HTTP 402 で応答した。商業条件でこのエージェントにサービスを提供する

スキップ

unknown

回答するほど最近測定されていない

フェッチ

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)」。

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    D
    maintenance
    URL 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.
    16
    160
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Maango 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.
    7
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to check URL safety before fetching content, using Google Web Risk, URLhaus, PhishTank, and AI analysis to return SAFE/SUSPICIOUS/DANGEROUS verdicts.
    1
    365
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables 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.
    3
    51
    1
    MIT

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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