AnyCrawl

検索

検索エンジンをクエリし、構造化結果を取得する SERP API

はじめに

AnyCrawl の Search API は、複数の検索エンジンの結果にプログラムからアクセスできます。大規模言語モデル(LLM)向けに設計され、AI の処理・分析に適したクリーンな構造化データを返します。

API はすぐに同期的に結果を返します。ポーリングや Webhook は不要です。複数の検索エンジン複数ページの結果取得に対応し、幅広いデータ収集が可能です。

主な機能

  • マルチエンジン:現状 Google に対応。他エンジンも予定
  • LLM 向け:AI 処理に適した構造化 JSON
  • 多言語:言語・地域を指定して検索可能
  • 複数ページ:1 リクエストで複数ページの結果を取得
  • 高パフォーマンスネイティブな高同時実行と非同期処理
  • 即時応答同期 API — ポーリングなしで結果を取得
  • 包括的な結果:検索結果と検索サジェストの両方を返す

API エンドポイント

POST https://api.anycrawl.dev/v1/search

使用例

基本検索(既定は Google)

curl -X POST "https://api.anycrawl.dev/v1/search" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type": "application/json" \
  -d '{
    "query": "OpenAI ChatGPT"
  }'

複数ページ検索

curl -X POST "https://api.anycrawl.dev/v1/search" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type": "application/json" \
  -d '{
    "query": "machine learning tutorials",
    "pages": 3,
    "limit": 10
  }'

言語・地域を指定した検索

curl -X POST "https://api.anycrawl.dev/v1/search" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type": "application/json" \
  -d '{
    "query": "AnyCrawl",
    "lang": "zh",
    "pages": 2
  }'

ページネーション付き検索

curl -X POST "https://api.anycrawl.dev/v1/search" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type": "application/json" \
  -d '{
    "query": "web scraping tools",
    "offset": 20,
    "limit": 10
  }'

セーフサーチを指定した検索

curl -X POST "https://api.anycrawl.dev/v1/search" \
  -H "Authorization: Bearer <your-api-key>" \
  -H "Content-Type": "application/json" \
  -d '{
    "query": "educational content",
    "safe_search": 0
  }'

リクエストパラメータ

パラメータ必須既定値説明
querystringはい-実行する検索クエリ文字列
template_idstringいいえ-この検索で使うテンプレート ID
variablesobjectいいえ-テンプレート変数(template_id 指定時のみ使用)
engineenumいいえgoogle使用する検索エンジン。現在対応: google
limitnumberいいえ101 ページあたりの最大件数
offsetnumberいいえ0スキップする件数(ページネーション用)
pagesnumberいいえ1取得する検索結果ページ数(最小: 1、最大: 20)
langstringいいえen検索結果の言語ロケール(例: 'en''zh''es''fr'
countrystringいいえ-検索結果の国・地域ロケール(例: 'US''GB''CN'
timeRangeenumいいえ-期間フィルター: dayweekmonthyear
sourcesenumいいえ-検索ソース: webimagesnews(SearXNG)
safe_searchnumber | nullいいえnullGoogle のセーフサーチ: 0(オフ)、1(中)、2(高)、または null(既定)。Google のみ有効。

任意: 結果 URL 用の scrape_options

指定すると、各検索結果 URL を同じオプションでスクレイプします(/v1/scrape と同じフィールド、トップレベルの url を除く)。注: ブラウザ専用オプションは、ブラウザ以外のスクレイプでは無視されます。

| フィールド | 型 | 既定値 | 備考 | | ------------------- | ------------------------ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------- | | engine | enum | - | 結果 URL のスクレイプエンジン: autocheerioplaywrightpuppeteer | | formats | array of enum | ["markdown"] | 出力形式: markdownhtmltextscreenshotscreenshot@fullPagerawHtmljsonsummarylinks | | timeout | number | 60000 | 1 リクエストあたりのタイムアウト(ミリ秒) | | wait_for | number | - | 抽出前の待機(ミリ秒)。ブラウザエンジンのみ。wait_for_selector より優先度が低い | | wait_until | enum | - | ブラウザのナビゲーション待機条件: loaddomcontentloadednetworkidlecommit | | wait_for_selector | string, object, or array | - | 1 つまたは複数のセレクタを待つ(ブラウジングエンジンのみ)。CSS 文字列、オブジェクト { selector: string, state?: "attached" | "visible" | "hidden" | "detached", timeout?: number }、または文字列とオブジェクトの配列。各エントリは順に待機。wait_for より優先。 | | include_tags | array of string | - | 一致する CSS セレクタの要素のみ含める | | exclude_tags | array of string | - | 一致する CSS セレクタの要素を除外する | | only_main_content | boolean | true | 本文のみ抽出(ヘッダー・フッター・ナビなどを除去)。include_tags が優先される | | proxy | string (URI) | - | 任意のプロキシ URL | | json_options | object | - | 構造化 JSON 抽出用オプション(schema、user_prompt、schema_name、schema_description) | | extract_source | enum | markdown | JSON 抽出元: markdown(既定)または html | | ocr_options | boolean | false | Markdown 画像のみ OCR 補強を有効にする。Markdown 生成に影響し、html/rawHtml には影響しない。 | | max_age | number | - | キャッシュ最大経過時間(ミリ秒)。0 で読み取りスキップ。省略時はサーバー既定 | | store_in_cache | boolean | true | 結果ごとのスクレイプでページキャッシュに書き込むか |

対応検索エンジン

google(既定)

  • 用途: 網羅的な結果が得られる一般的な Web 検索
  • 利点: 最も網羅的な結果。多言語・多地域に対応
  • 機能: 検索結果とサジェストの両方を返す。セーフサーチ(オフ/中/高)に対応
  • 向いている用途: 一般的な Web 検索、調査、コンテンツ探索
  • セーフサーチ: safe_search で 0(オフ)、1(中)、2(高)、または null(既定)を指定可能

レスポンス形式

成功レスポンス(HTTP 200)

検索成功

{
    "success": true,
    "data": [
        {
            "title": "AlsoAsked: People Also Ask keyword research tool",
            "url": "https://alsoasked.com/",
            "description": "Find the questions people also ask. Enter a question, brand or search query. e.g. 'keyword research'.",
            "source": "Google Search Result"
        },
        {
            "title": "OpenAI ChatGPT Features and Benefits",
            "url": "https://openai.com/chatgpt",
            "description": "ChatGPT is an AI assistant that can help with writing, research, and problem-solving.",
            "source": "Google Search Result"
        },
        {
            "title": "Keyword tool",
            "source": "Google Suggestions"
        }
    ]
}

検索結果の種類

API は次の 2 種類を返します。

  1. 検索結果: タイトル、URL、説明、ソースが揃った通常の結果
  2. 検索サジェスト: 検索エンジンからの関連クエリ候補

エラーレスポンス

400 - バリデーションエラー

{
    "success": false,
    "error": "Validation error",
    "details": {
        "issues": [
            {
                "field": "engine",
                "message": "Invalid enum value. Expected 'google', received 'invalid'",
                "code": "invalid_enum_value"
            }
        ],
        "messages": ["Invalid enum value. Expected 'google', received 'invalid'"]
    }
}

401 - 認証エラー

{
    "success": false,
    "error": "Invalid API key"
}

402 - 支払いが必要

{
    "success": false,
    "error": "Insufficient credits. Please upgrade your plan or purchase more credits."
}

ベストプラクティス

検索エンジンの選び方

  1. 一般的な Web 検索google を使う(現時点で唯一対応)
  2. 多言語検索 → 適切な lang を指定する
  3. 幅広い調査pages を増やしてより多くの結果を取得する

パフォーマンス

  • バッチ: 複数回呼ぶ代わりに pages で 1 リクエストにまとめる
  • 言語指定: 地域に合わせた言語でローカライズ結果を得やすくする
  • クエリ: 具体的なキーワード・フレーズで品質を上げる

エラー処理

try {
    const response = await fetch("/v1/search", {
        method: "POST",
        headers: {
            Authorization: "Bearer YOUR_API_KEY",
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            query: "artificial intelligence",
            pages: 2,
        }),
    });

    const result = await response.json();

    if (result.success) {
        // 成功時の処理
        console.log("Found results:", result.data.length);

        // 検索結果とサジェストを分ける
        const searchResults = result.data.filter((item) => item.url);
        const suggestions = result.data.filter((item) => !item.url);

        console.log("Search Results:", searchResults.length);
        console.log("Suggestions:", suggestions.length);
    } else {
        // 検索失敗
        console.error("Search failed:", result.error);
    }
} catch (error) {
    // ネットワークエラー
    console.error("Request failed:", error);
}

高同時実行の使い方

API はネイティブに高同時実行に対応しています。レート制限を気にせず、複数の検索リクエストを同時に送れます。

// 同時検索の例
const queries = ["machine learning", "artificial intelligence", "data science"];

const searchPromises = queries.map((query) =>
    fetch("/v1/search", {
        method: "POST",
        headers: {
            Authorization: "Bearer YOUR_API_KEY",
            "Content-Type": "application/json",
        },
        body: JSON.stringify({ query, engine: "google", pages: 2 }),
    }).then((res) => res.json())
);

// すべて同時実行され、すぐに返る
const results = await Promise.all(searchPromises);
console.log(`Completed ${results.length} searches simultaneously`);

レート制限とクレジット

  • 消費クレジットは、リクエストしたページ数に基づきます
  • クレジット消費 = ページ数(例: pages: 3 なら 3 クレジット)
  • 同時リクエストに対するレート制限はありません — API は高同時実行をネイティブにサポートします
  • クレジット使用量はレスポンスヘッダーなどで確認してください

よくある質問

Q: 言語設定はいつ変えるべきですか?

A:

  • 英語(en: グローバルな結果や国際的なコンテンツ向け
  • 中国語(zh: 中国語コンテンツや中国向けの結果向け
  • 地域バリアント(例: en-GBfr-CA): 国・地域に合わせたローカライズ結果向け

Q: 想定より結果が少ないのはなぜですか?

A: 次のような理由が考えられます。

  • クエリが細かすぎる、またはマイナーな語だけを使っている
  • クエリの言語と lang が合っていない
  • トピックや地域によって検索エンジンの制約がある
  • ネットワークの問題

Q: 地域を絞った検索はどうすればよいですか?

A: 現在、API は lang に基づいて適切な地域を自動選択します。次を推奨します。

  • 対象地域に合う言語コードを使う(例: 英国向けは en-GB
  • 必要ならクエリに地域固有の語を含める

Q: 検索結果とサジェストの違いは?

A:

  • 検索結果: タイトル、URL、説明、ソースが揃ったエントリ
  • 検索サジェスト: URL のない関連クエリ候補。クエリ拡張に有用

Q: 同時検索にレート制限はありますか?

A: ありません。API はネイティブに高同時実行をサポートしており、複数リクエストを同時に送ってもレート制限の心配はなく、すぐにデータが返ります。

言語・地域の対応

Search API は lang で複数の言語・地域に対応します。対応ロケールは次のとおりです。

主要言語

  • all - すべての言語

英語 🌐

  • en - グローバル英語
  • en-AU - 英語(オーストラリア)🇦🇺
  • en-CA - 英語(カナダ)🇨🇦
  • en-GB - 英語(イギリス)🇬🇧
  • en-IE - 英語(アイルランド)🇮🇪
  • en-IN - 英語(インド)🇮🇳
  • en-NZ - 英語(ニュージーランド)🇳🇿
  • en-PH - 英語(フィリピン)🇵🇭
  • en-PK - 英語(パキスタン)🇵🇰
  • en-SG - 英語(シンガポール)🇸🇬
  • en-US - 英語(アメリカ)🇺🇸
  • en-ZA - 英語(南アフリカ)🇿🇦

中国語 🌐

  • zh - グローバル中国語
  • zh-CN - 中国語(中国)🇨🇳
  • zh-HK - 中国語(香港)🇭🇰
  • zh-TW - 中国語(台湾)🇹🇼

スペイン語 🌐

  • es - グローバルスペイン語
  • es-AR - スペイン語(アルゼンチン)🇦🇷
  • es-CL - スペイン語(チリ)🇨🇱
  • es-CO - スペイン語(コロンビア)🇨🇴
  • es-ES - スペイン語(スペイン)🇪🇸
  • es-MX - スペイン語(メキシコ)🇲🇽
  • es-PE - スペイン語(ペルー)🇵🇪

フランス語 🌐

  • fr - グローバルフランス語
  • fr-BE - フランス語(ベルギー)🇧🇪
  • fr-CA - フランス語(カナダ)🇨🇦
  • fr-CH - フランス語(スイス)🇨🇭
  • fr-FR - フランス語(フランス)🇫🇷

ドイツ語 🌐

  • de - グローバルドイツ語
  • de-AT - ドイツ語(オーストリア)🇦🇹
  • de-BE - ドイツ語(ベルギー)🇧🇪
  • de-CH - ドイツ語(スイス)🇨🇭
  • de-DE - ドイツ語(ドイツ)🇩🇪

ポルトガル語 🌐

  • pt - グローバルポルトガル語
  • pt-BR - ポルトガル語(ブラジル)🇧🇷
  • pt-PT - ポルトガル語(ポルトガル)🇵🇹

イタリア語 🌐

  • it - グローバルイタリア語
  • it-CH - イタリア語(スイス)🇨🇭
  • it-IT - イタリア語(イタリア)🇮🇹

日本語 🌐

  • ja - グローバル日本語
  • ja-JP - 日本語(日本)🇯🇵

韓国語 🌐

  • ko - グローバル韓国語
  • ko-KR - 韓国語(韓国)🇰🇷

ロシア語 🌐

  • ru - グローバルロシア語
  • ru-RU - ロシア語(ロシア)🇷🇺

ヨーロッパの言語

オランダ語 🌐

  • nl - グローバルオランダ語
  • nl-BE - オランダ語(ベルギー)🇧🇪
  • nl-NL - オランダ語(オランダ)🇳🇱

ポーランド語 🌐

  • pl - グローバルポーランド語
  • pl-PL - ポーランド語(ポーランド)🇵🇱

チェコ語 🌐

  • cs - グローバルチェコ語
  • cs-CZ - チェコ語(チェコ)🇨🇿

ハンガリー語 🌐

  • hu - グローバルハンガリー語
  • hu-HU - ハンガリー語(ハンガリー)🇭🇺

ルーマニア語 🌐

  • ro - グローバルルーマニア語
  • ro-RO - ルーマニア語(ルーマニア)🇷🇴

ギリシャ語 🌐

  • el - グローバルギリシャ語
  • el-GR - ギリシャ語(ギリシャ)🇬🇷

ブルガリア語 🌐

  • bg - グローバルブルガリア語
  • bg-BG - ブルガリア語(ブルガリア)🇧🇬

クロアチア語 🌐

  • hr - グローバルクロアチア語

スロバキア語 🌐

  • sk - グローバルスロバキア語

スロベニア語 🌐

  • sl - グローバルスロベニア語

エストニア語 🌐

  • et - グローバルエストニア語
  • et-EE - エストニア語(エストニア)🇪🇪

ラトビア語 🌐

  • lv - グローバルラトビア語

リトアニア語 🌐

  • lt - グローバルリトアニア語

フィンランド語 🌐

  • fi - グローバルフィンランド語
  • fi-FI - フィンランド語(フィンランド)🇫🇮

スウェーデン語 🌐

  • sv - グローバルスウェーデン語
  • sv-SE - スウェーデン語(スウェーデン)🇸🇪

ノルウェー語 🌐

  • nb - ノルウェー語ブークモール
  • nb-NO - ノルウェー語ブークモール(ノルウェー)🇳🇴

デンマーク語 🌐

  • da - グローバルデンマーク語
  • da-DK - デンマーク語(デンマーク)🇩🇰

アイスランド語 🌐

  • is - グローバルアイスランド語

その他の言語

アラビア語 🌐

  • ar - グローバルアラビア語
  • ar-SA - アラビア語(サウジアラビア)🇸🇦

ヘブライ語 🇮🇱

  • he - ヘブライ語

トルコ語 🌐

  • tr - グローバルトルコ語
  • tr-TR - トルコ語(トルコ)🇹🇷

ペルシア語 🌐

  • fa - ペルシア語

ヒンディー語 🌐

  • hi - ヒンディー語

ウルドゥー語 🌐

  • ur - ウルドゥー語

タイ語 🌐

  • th - グローバルタイ語
  • th-TH - タイ語(タイ)🇹🇭

ベトナム語 🌐

  • vi - グローバルベトナム語
  • vi-VN - ベトナム語(ベトナム)🇻🇳

インドネシア語 🌐

  • id - グローバルインドネシア語
  • id-ID - インドネシア語(インドネシア)🇮🇩

インドの言語

  • kn - カンナダ語 🌐
  • ml - マラヤーラム語 🌐
  • mr - マラーティー語 🌐
  • ta - タミル語 🌐
  • te - テルグ語 🌐

その他のヨーロッパの言語

  • af - アフリカーンス語 🌐
  • be - ベラルーシ語 🌐
  • ca - カタルーニャ語 🌐
  • cy - ウェールズ語 🌐
  • eu - バスク語 🌐
  • ga - アイルランド語 🌐
  • gd - スコットランド・ゲール語 🌐
  • gl - ガリシア語 🌐
  • sq - アルバニア語 🌐
  • uk - ウクライナ語 🌐

利用上の注意

  • グローバルコード(例: enzhes)は国の制限なしで広めの結果になりやすい
  • 国・地域付きコード(例: en-USzh-CNes-MX)は特定地域向けのローカライズ結果になりやすい
  • API は指定ロケールに応じて適切な Google ドメインと言語設定を自動選択します
  • 最良の結果のため、クエリの言語と lang を揃えてください

目次

はじめに主な機能API エンドポイント使用例基本検索(既定は Google)複数ページ検索言語・地域を指定した検索ページネーション付き検索セーフサーチを指定した検索リクエストパラメータ任意: 結果 URL 用の scrape_options対応検索エンジンgoogle(既定)レスポンス形式成功レスポンス(HTTP 200)検索成功検索結果の種類エラーレスポンス400 - バリデーションエラー401 - 認証エラー402 - 支払いが必要ベストプラクティス検索エンジンの選び方パフォーマンスエラー処理高同時実行の使い方レート制限とクレジットよくある質問Q: 言語設定はいつ変えるべきですか?Q: 想定より結果が少ないのはなぜですか?Q: 地域を絞った検索はどうすればよいですか?Q: 検索結果とサジェストの違いは?Q: 同時検索にレート制限はありますか?言語・地域の対応主要言語英語 🌐中国語 🌐スペイン語 🌐フランス語 🌐ドイツ語 🌐ポルトガル語 🌐イタリア語 🌐日本語 🌐韓国語 🌐ロシア語 🌐ヨーロッパの言語オランダ語 🌐ポーランド語 🌐チェコ語 🌐ハンガリー語 🌐ルーマニア語 🌐ギリシャ語 🌐ブルガリア語 🌐クロアチア語 🌐スロバキア語 🌐スロベニア語 🌐エストニア語 🌐ラトビア語 🌐リトアニア語 🌐フィンランド語 🌐スウェーデン語 🌐ノルウェー語 🌐デンマーク語 🌐アイスランド語 🌐その他の言語アラビア語 🌐ヘブライ語 🇮🇱トルコ語 🌐ペルシア語 🌐ヒンディー語 🌐ウルドゥー語 🌐タイ語 🌐ベトナム語 🌐インドネシア語 🌐インドの言語その他のヨーロッパの言語利用上の注意