当社独自のアクセス統計は常に有効です。Google Analyticsは、公開ページ(ログイン後のワークスペースは対象外)の利用状況を把握するためのもので、許可をいただいた場合のみ有効になります。詳しくは プライバシーポリシーをご覧ください。

POST

APIの稼働状況

24時間の稼働状況
100%
24時間の平均応答時間
11.84 s
  • 良好/正常
  • 利用可能
  • 制限あり
  • ほぼ停止
良好

スキルを指定してUpworkの求人を検索します。予算または時給の範囲、経験レベル、提案数、クライアントの支出額・評価・支払い認証状況を取得できます。job_type、experience_level、掲載日で絞り込めます。提案の送信は行わず、採用を示すものでもありません。

Upwork Searchは、クライアントがUpworkに投稿した求人をkeywordで検索し、各求人のタイトル、説明、予算または時給レンジ、契約形態、求められる経験レベル、稼働量、想定期間、提案数、採用予定人数、投稿日時、タグに加え、クライアントのプロフィール(名前、所在地、評価、総支出額、採用率、支払った平均時給、支払い方法が認証済みかどうか)を返します。フリーランサーやエージェンシーは提案する価値のある案件探しに、アナリストは特定スキルの需要や単価の調査に活用しています。

返すのは求人であり、フリーランサーではありません。job_type、experience_level、およびsinceとuntilで指定する投稿期間で絞り込み、sortで並べ替えます。固定報酬の求人にはbudget(通貨はbudget_currency)が、時給制の求人にはhourly_rate_minとhourly_rate_maxが含まれます。proposalsの数が多いほど競争は激しく、クライアントが信頼できるかどうかを最もよく示すのはclient_total_spentです。

料金は1,000リクエストあたり$1.39(1回あたり$0.001389)です。失敗した呼び出しと空の結果には課金されません。 同期処理です。時間のかかるジョブでは、ボディに"mode": "async"を追加し、job_idを取得してポーリングしてください。

AIプロンプト

EveryInfraのUpwork 検索エンドポイント(upwork/search)を使ったデータ収集スクリプトの作成を手伝ってください。

エンドポイントの仕組み:
- リクエスト:ヘッダーにAuthorization: Bearer <API key>を指定して、https://api.everyinfra.com/api/v1/socialにPOSTします。APIキーは環境変数EVERYINFRA_API_KEYから読み込み、ハードコードしないでください。
- リクエストボディでplatformにupwork、actionにsearchを指定し、パラメータはparamsの中に入れます。
- 必須パラメータ:
  - keyword: searchでは業務委託の求人を、freelancersでは人材を検索します。同じスキル用語でも、2つのアクションでそれぞれクライアントの需要とフリーランサーのプロフィールが対象になります。
- 任意パラメータ:
  - exclude_keywords: searchで除外する求人のキーワードです。人材のブラックリストや最低スキル要件ではありません。
  - experience_level: 経験レベルで求人を絞り込みます。entry_level、intermediate_level、expert_levelのいずれかを指定します。(指定可能な値:entry_level / expert_level / intermediate_level)
  - job_type: searchで使用する契約の支払い形態です。hourlyまたはfixed_priceを指定します。フルタイムやパートタイムの区分ではありません。(指定可能な値:fixed_price / hourly)
  - since: searchで使用する求人掲載日の開始日です。雇用主の登録日ではありません。
  - sort: searchで使用する求人の並び順です。newest、oldest、relevanceのいずれかを指定します。oldestはすべての場合に適用されるとは限りません。(指定可能な値:newest / oldest / relevance)
  - until: searchで使用する求人掲載日の終了日で、sinceと組み合わせて使用します。契約終了日ではありません。
  - limit: この呼び出しで返す最大行数で、1〜100の整数で指定します。省略するとデフォルト値が適用されます。また、返される行数がこれより少なくなる場合があります。最大値を超える値を指定すると、課金前に422が返されます。(デフォルト:20)
- レコードのリストを返します。各レコードの主なフィールド: id、url、title、text、budget、budget_currency、hourly_rate_min、hourly_rate_max、job_type、experience_level、engagement_type、duration。フィールドは全部で27個です。一覧はhttps://api.everyinfra.com/api/v1/social/catalog?platform=upworkを参照してください。.
- リクエストボディの例:
{
  "platform": "upwork",
  "action": "search",
  "params": {
    "keyword": "Python automation"
  }
}
- 料金:1,000リクエストあたり$1.39。失敗時および結果が空の場合は課金されません。
- 対象が数十〜数百件ある場合は、ボディに"mode": "async"を追加します。すぐにjob_idが返されるので、GET https://api.everyinfra.com/api/v1/jobs/{job_id}をポーリングして結果を取得します。
- 422の場合は、エラーに含まれる推奨パラメータ名と指定可能な値を使ってリクエストを修正します。429または503の場合は、Retry-Afterの指定に従って待ってから再試行します。

コードを書く前に、必要な対象とその件数、必要なフィールド、希望する出力形式を私に質問してください。そのうえで、計画と概算費用を私に確認してください。

リクエストパラメータ

名前場所型必須デフォルト説明
Authorizationheaderstringはい-Bearerの後にAPIキーを続けます。APIキーはコンソールで作成してください。URLやコードリポジトリには絶対に含めないでください。
platformbodystringはいupworkプラットフォームの識別子です。値は固定です。
actionbodystringはいsearch機能の識別子です。値は固定です。
keywordbody.paramsstringはい-searchでは業務委託の求人を、freelancersでは人材を検索します。同じスキル用語でも、2つのアクションでそれぞれクライアントの需要とフリーランサーのプロフィールが対象になります。
exclude_keywordsbody.paramsobjectいいえ-searchで除外する求人のキーワードです。人材のブラックリストや最低スキル要件ではありません。
experience_levelbody.paramsstring (enum)いいえ-経験レベルで求人を絞り込みます。entry_level、intermediate_level、expert_levelのいずれかを指定します。指定可能な値entry_levelexpert_levelintermediate_level
job_typebody.paramsstring (enum)いいえ-searchで使用する契約の支払い形態です。hourlyまたはfixed_priceを指定します。フルタイムやパートタイムの区分ではありません。指定可能な値fixed_pricehourly
sincebody.paramsdateいいえ-searchで使用する求人掲載日の開始日です。雇用主の登録日ではありません。
sortbody.paramsstring (enum)いいえ-searchで使用する求人の並び順です。newest、oldest、relevanceのいずれかを指定します。oldestはすべての場合に適用されるとは限りません。指定可能な値newestoldestrelevance
untilbody.paramsdateいいえ-searchで使用する求人掲載日の終了日で、sinceと組み合わせて使用します。契約終了日ではありません。
limitbody.paramsinteger (1–100)いいえ20この呼び出しで返す最大行数で、1〜100の整数で指定します。省略するとデフォルト値が適用されます。また、返される行数がこれより少なくなる場合があります。最大値を超える値を指定すると、課金前に422が返されます。

コードサンプル

bash
curl -X POST 'https://api.everyinfra.com/api/v1/social' \
  -H "Authorization: Bearer $EVERYINFRA_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "platform": "upwork",
  "action": "search",
  "params": {
    "keyword": "Python automation"
  }
}'

OpenAPI定義(JSON)サンプルは環境変数EVERYINFRA_API_KEYからAPIキーを読み込みます。コピーしたコードにAPIキーが含まれることはありません。

レスポンス例

実際のレスポンス

September 26, 2026 at 08:56(UTC)に、上のコードサンプルのパラメータでこのAPIを呼び出して取得しました。resultsとcountはその呼び出しの実際のレスポンスから個人情報(名前、ハンドル、アバター、プロフィールリンク、連絡先)を削除したものです。リストは先頭の2件のみ掲載しています。id、billing、quotaは呼び出しごとに異なるため、構造のみを示しています。

json
{
  "id": "req_…",
  "platform": "upwork",
  "action": "search",
  "results": [
    {
      "id": "•••",
      "url": "https://www.upwork.com/jobs/~022103162557197640589",
      "title": "Part-Time Automation and Systems Builder",
      "text": "# Part-Time Automation & Systems Builder\n\n**The role**\n\nWe’re looking for someone who can turn operational problems into dependable systems our team uses every day. You’ll build automations, internal tools, and reporting workflows that reduce manual work as we grow.\n\nOur technica…",
      "budget_currency": "USD",
      "hourly_rate_min": 20,
      "hourly_rate_max": 30,
      "job_type": "HOURLY",
      "experience_level": "IntermediateLevel",
      "engagement_type": "FULL_TIME",
      "duration": "More than 6 months",
      "proposals": 173,
      "persons_to_hire": 1,
      "posted_at": "2026-09-24T16:40:48.454000+00:00",
      "tags": [
        "Business Process Automation",
        "API Integration",
        "Google Apps Script"
      ],
      "client_location": "United States",
      "client_rating": 4.91,
      "client_review_count": 16,
      "client_total_spent": 13591.13,
      "payment_verified": true,
      "platform": "upwork"
    },
    {
      "id": "•••",
      "url": "https://www.upwork.com/jobs/~022103697282534705588",
      "title": "Python automation script to batch-generate illustrated storybooks (Claude API + image API)",
      "text": "I'm a children's story creator. I need a Python script that runs on its own on my Mac while I'm away.\n\nWhat it should do:\n\nRead a list of story concepts from a file.\nRead one fixed style spec file (format, page count, characters, tone), used in every call.\nCall the Claude API to …",
      "budget": 1000,
      "budget_currency": "USD",
      "hourly_rate_min": 1000,
      "hourly_rate_max": 1000,
      "job_type": "FIXED",
      "experience_level": "IntermediateLevel",
      "duration": "1 to 3 months",
      "proposals": 45,
      "persons_to_hire": 1,
      "posted_at": "2026-09-26T07:05:29.443000+00:00",
      "tags": [
        "Python",
        "Automation",
        "Scripting"
      ],
      "client_location": "Singapore",
      "client_rating": 0,
      "client_review_count": 0,
      "client_total_spent": 0,
      "payment_verified": true,
      "platform": "upwork"
    }
  ],
  "count": 20,
  "billing": {
    "charged": …,
    "charged_usd": …,
    "balance_after_usd": …,
    …
  },
  "quota": { … }
}

レスポンスフィールド

業務データはresultsに含まれます。この表はレコードに含まれうるフィールドの一覧です。プラットフォームに表示されない値を作り出すことはありません。

フィールド意味
idプラットフォーム上でのレコードの一意なIDです。一意性は1つのプラットフォーム内に限られ、プラットフォームが異なるとIDが重複する場合があります。
urlプラットフォーム上のレコードへのリンクです。
titleタイトルです。プラットフォームにタイトルがない場合(テキストのみの投稿など)はnullになります。
textHTMLを除去した本文です。省略されることなく全文が返されます(一部のプラットフォームでは一覧結果自体に抜粋しか含まれません。その場合は各プラットフォームのフィールドの注記に記載しています)。
budgetプラットフォーム上の意味のまま
budget_currencyプラットフォーム上の意味のまま
hourly_rate_minプラットフォーム上の意味のまま
hourly_rate_maxプラットフォーム上の意味のまま
job_typeプラットフォーム上の意味のまま
experience_levelプラットフォーム上の意味のまま
engagement_typeプラットフォーム上の意味のまま
durationプラットフォーム上の意味のまま
proposalsプラットフォーム上の意味のまま
persons_to_hireプラットフォーム上の意味のまま
posted_at投稿日時です。ISO 8601形式のUTCで返されます(例:2026-08-07T12:34:56+00:00)。プラットフォームから非標準の文字列が返された場合はそのまま渡されるため、パース処理は堅牢に実装してください。nullはプラットフォームが公開していないことを示します。
tagsタグの配列です。タグがない場合はnullではなく空の配列になります。
client_nameプラットフォーム上の意味のまま
client_locationプラットフォーム上の意味のまま
client_ratingプラットフォーム上の意味のまま
client_review_countプラットフォーム上の意味のまま
client_total_spentプラットフォーム上の意味のまま
client_hire_rateプラットフォーム上の意味のまま
client_avg_hourly_rateプラットフォーム上の意味のまま
payment_verifiedプラットフォーム上の意味のまま
email連絡先のメールアドレスです。取得したまま返します。
emails連絡先のメールアドレスです(1件のレコードに複数含まれる場合があります)。重複を除いたうえで、取得したまま返します。
phone連絡先の電話番号です。形式を正規化せず、そのまま返します。
platform取得元プラットフォームの識別子で、リクエストのplatformと同じです(例:xiaohongshu、tiktok)。

FAQ

求人ではなくフリーランサーを検索できますか?

この機能ではできません。keywordはクライアントが投稿した求人にマッチします。仕事を請け負う人材を探すには、Upwork Freelancers機能を使ってください。スキルのキーワードを指定でき、大陸やTop Ratedステータスで結果を絞り込むこともできます。

特定の単語を含む求人を除外するには?

exclude_keywordsは単なる文字列ではなく、オブジェクトとして渡します。例:{"keywords": ["WordPress"], "matchTitle": true, "matchDescription": true, "matchSkills": true}。リストには除外する単語を指定し、3つのスイッチで、それらの単語を求人タイトル、説明、スキル一覧のそれぞれで探すかどうかを指定します。

クライアントに提案を送る価値があるかどうかは、どう判断すればよいですか?

まずclient_total_spentを確認します。これはクライアントのUpworkでの総支出額で、信頼できるクライアントかどうかを示す単一の指標として最も確かなものです。次にpayment_verifiedを確認してください。支払い方法が未認証の場合、報酬が支払われないリスクが高くなります。さらにclient_hire_rateも確認します。この割合が低い場合、そのクライアントは投稿しても採用しないことが多いということです。client_ratingはclient_review_countと合わせて判断してください。

エラーと課金

401
キーが未指定か無効です。
402
残高が不足しています。先にチャージしてください。
422
パラメータ名または値が無効です。エラーに含まれる候補を参考に修正してください。課金はされません。
429
1分あたりのリクエスト上限に達しました。Retry-Afterの指定に従って待ってから再試行してください。
503
処理を完了できませんでした。保留中の請求額は残高に戻されます。結果が不明な場合は、再試行する前に確認してください。
200(空)
データがありません。課金はされません。

エラー

公式リファレンス

対象と用語の確認にのみ使用しています。プラットフォームによるEveryInfraの承認や推奨を意味するものではありません。

  • Upwork:時間単価契約と固定価格契約 ↗

    Upworkでは、時間単価契約と、プロジェクト全体の作業範囲またはマイルストーンに基づく固定価格契約を区別しています。このアクションのjob_typeパラメータは案件を分類するもので、作業時間の記録、エスクロー決済、マイルストーン管理といったプラットフォームの公式機能を提供するものではありません。

    確認日:2026-09-04