Наша собственная статистика посещений включена всегда. Google Analytics помогает нам понять, как пользуются нашими публичными страницами (но не вашим рабочим пространством после входа), и включается только с вашего разрешения. См. нашу политику конфиденциальности.

API Upwork Поиск

POST

Состояние API

Состояние за 24 ч
99%
Среднее время за 24 ч
12.00 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.39 за 1 000 запросов ($0.001389 за вызов). Неудачные вызовы и пустые результаты не оплачиваются. Синхронный режим. Для долгих задач добавьте в тело запроса "mode": "async", получите job_id и опрашивайте статус.

Промпт для ИИ

Помогите мне написать скрипт для сбора данных через эндпоинт EveryInfra Upwork Поиск (upwork/search).

Как работает эндпоинт:
- Запрос: POST https://api.everyinfra.com/api/v1/social с заголовком Authorization: Bearer <API key>. Читайте ключ из переменной окружения EVERYINFRA_API_KEY и никогда не прописывайте его в коде.
- В теле запроса укажите platform: upwork и action: search, а параметры передайте в params.
- Обязательные параметры:
  - keyword: В search ищет заказы на аутсорсинг, а в freelancers ищет исполнителей. Один и тот же навык в этих двух действиях соответствует спросу заказчиков и профилям фрилансеров.
- Необязательные параметры:
  - 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. Если параметр не указан, применяется значение по умолчанию; вызов может вернуть меньше записей. (по умолчанию: 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.39 за 1 000 запросов; неудачные и пустые результаты не оплачиваются.
- Для десятков или сотен целей добавьте в тело запроса "mode": "async": вы сразу получите job_id и сможете опрашивать GET https://api.everyinfra.com/api/v1/jobs/{job_id}, чтобы получить результат.
- При ответе 422 исправьте запрос, используя предложенные в ошибке имена параметров и допустимые значения; при ответе 429 или 503 подождите указанное в Retry-After время и повторите попытку.

Прежде чем писать код, спросите меня, какие цели мне нужны, сколько их будет, какие поля мне нужны и в каком формате вывести результат; затем согласуйте со мной план и примерную стоимость.

Параметры запроса

ИмяРасположениеТипОбязательныйПо умолчаниюОписание
AuthorizationheaderstringДа-Укажите Bearer, а после него — ваш API-ключ. Создайте ключ в консоли; никогда не указывайте его в URL и не храните в репозитории кода.
platformbodystringДаupworkИдентификатор платформы, фиксированное значение.
actionbodystringДаsearchИдентификатор возможности, фиксированное значение.
keywordbody.paramsstringДа-В search ищет заказы на аутсорсинг, а в freelancers ищет исполнителей. Один и тот же навык в этих двух действиях соответствует спросу заказчиков и профилям фрилансеров.
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; скопированный код никогда не содержит ваш ключ.

Пример ответа

Реальный ответ

Получено 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 записи на платформе. Уникален только в пределах одной платформы; на разных платформах ID могут повторяться.
urlСсылка на запись на платформе.
titleЗаголовок. null, если на платформе нет заголовков (например, у текстовых постов).
textОсновной текст без HTML возвращается полностью и никогда не обрезается (на нескольких платформах результаты списковых запросов содержат только фрагмент; это указано в примечаниях к полям платформы).
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Контактные адреса электронной почты (у записи их может быть несколько) передаются как есть, без дубликатов.
phoneКонтактный номер телефона передаётся без нормализации формата.
platformИдентификатор исходной платформы. Совпадает со значением platform в запросе (например, xiaohongshu, tiktok).

FAQ

Можно ли искать фрилансеров, а не заказы?

С помощью этой возможности нельзя: keyword ищет заказы, размещённые клиентами. Чтобы найти исполнителей, используйте возможность Upwork Freelancers: она принимает ключевое слово навыка и может сужать результаты по континенту и статусу Top Rated.

Как исключить заказы, в которых упоминается определённое слово?

Передайте exclude_keywords объектом, а не простой строкой, например {"keywords": ["WordPress"], "matchTitle": true, "matchDescription": true, "matchSkills": true}. Список содержит слова для исключения, а три переключателя определяют, искать ли их в названии заказа, в описании и в списке навыков.

Как понять, стоит ли откликаться на заказ клиента?

Начните с client_total_spent, общих расходов клиента на Upwork: это самый надёжный отдельный признак благонадёжного клиента. Затем проверьте payment_verified, поскольку при неверифицированном способе оплаты выше риск не получить деньги, и client_hire_rate: низкая доля означает, что клиент часто публикует заказы, никого не нанимая. Смотрите client_rating вместе с client_review_count.

Ошибки и оплата

401
Ключ отсутствует или недействителен.
402
Недостаточно средств на балансе. Сначала пополните баланс.
422
Недопустимое имя или значение параметра. Исправьте запрос по подсказкам в сообщении об ошибке. Без списания.
429
Достигнут лимит запросов в минуту. Подождите указанное в Retry-After время, затем повторите попытку.
503
Не удалось выполнить. Зарезервированная сумма возвращается на баланс. Если результат неизвестен, проверьте его перед повторной попыткой.
200 (пусто)
Нет данных. Без списания.

Ошибки

Официальные источники

Используются только для проверки объектов и терминов. Они не означают, что платформа разрешила или одобрила работу EveryInfra.

  • Upwork: почасовые контракты и контракты с фиксированной ценой ↗

    Upwork различает контракты с почасовой оплатой и контракты с фиксированной ценой за весь объём проекта или за этапы. Параметр job_type в этом действии задаёт категорию вакансии; он не даёт официальных функций платформы, таких как учёт времени, оплата через эскроу или управление этапами.

    Проверено 2026-09-04