Поиск компаний

Режимы hybrid, sql, vector, fts и entity — параметры, колонки, дедуп и структура ответа.

На этой странице

Строка API ищет по смыслу и по точному совпадению, умеет SQL-выборку с сортировкой и сочетается с фильтрами.

Режимы (searchMode)

ЗначениеКогдаЧто делает
hybridПо умолчанию, если есть searchПолнотекст + вектор, сортировка по relevance
vectorТолько семантикаПоиск по смыслу
ftsТолько точные совпаденияПолнотекстовый поиск
sqlСписок без текстаФильтры и ручная сортировка
entityПоиск по сущностиНазвание, домен и похожие поля

Если searchMode не задан: при наличии search используется hybrid, без текста — sql. Значение auto — синоним этого правила. Параметр expandSemantics игнорируется.

Параметры GET

ПараметрТипПо умолчаниюОписание
searchstringТекст запроса
searchModestringhybrid / sqlСм. таблицу режимов
skipinteger0Смещение
limitinteger100Размер страницы, 1–1000
sortBystringСортировка, только sql
sortOrderstringascasc или desc
relevanceThresholdfloat0.8Порог векторной схожести (0–1)
columnsstring[]Явный список полей
uniqueBystring[]Дедуп по email и/или phone
mergeDuplicatesbooleantrueСклейка дублей на странице

Поля сортировки (sql): id · domain · name · sector · region · city · updated_at · email · employees.

Примеры GET

curl -sS --get "https://app.strokka.com/api/v1/companies" \
  --data-urlencode "search=маркетинговое агентство" \
  --data-urlencode "searchMode=hybrid" \
  --data-urlencode "limit=10"

POST

Полный аналог GET, параметры в JSON. Удобен, когда в URL нежелательны скобки.

curl -sS -X POST "https://app.strokka.com/api/v1/companies" \
  -H "Content-Type: application/json" \
  -d '{
    "search": "веб-студия",
    "searchMode": "hybrid",
    "skip": 0,
    "limit": 10,
    "filters": [
      {"field": "email", "operator": "not_empty", "value": "true", "logic": "and"},
      {"field": "city", "operator": "eq", "value": "Москва", "logic": "and"}
    ]
  }'

Выбор колонок (columns)

По умолчанию API отдаёт стандартный набор (name, domain, url, description, keywords, sector, region, city, address, email, phone). Активные фильтры могут добавить колонки.

С columnsстрого указанные поля плюс служебные id и relevance. Неизвестное имя → 422. Колонки из текста запроса сами не подбираются — только из columns.

curl -sS --get "https://app.strokka.com/api/v1/companies" \
  --data-urlencode "search=логистика" \
  --data-urlencode "searchMode=hybrid" \
  --data-urlencode "columns=name,description,keywords,email,phone,whatsapp" \
  --data-urlencode "filter[whatsapp][not_empty][and]=true" \
  --data-urlencode "limit=10"

В ответе смотрите displayFields и columnProjection: "explicit".

Русские синонимы работают: почтаemail, телефонphone, вотсапwhatsapp.

Дедупликация (uniqueBy)

Убирает повторы с одинаковыми контактами до пагинации. Допустимы только email и phone. Другие поля → 422.

  • totalCount — число уникальных записей
  • Остаётся первое вхождение по релевантности
  • Пустой контакт не участвует в дедупе
  • Email сравнивается без регистра, телефон — по цифрам
  • Два поля — логика OR
curl -sS --get "https://app.strokka.com/api/v1/companies" \
  --data-urlencode "searchMode=sql" \
  --data-urlencode "filter[email][not_empty][and]=true" \
  --data-urlencode "uniqueBy=email" \
  --data-urlencode "limit=100"

Склейка дублей (mergeDuplicates)

Склеивает похожие карточки внутри текущей страницы по URL, email, телефону или соцсетям. По умолчанию true. Не путать с uniqueBy: merge не меняет totalCount.

ЗначениеРезультат
trueДубли схлопываются, у keeper может появиться comment
falseСтарый формат без comment; в ответе "mergeDuplicates": false
curl -sS --get "https://app.strokka.com/api/v1/companies" \
  --data-urlencode "search=сбербанк" \
  --data-urlencode "searchMode=hybrid" \
  --data-urlencode "mergeDuplicates=false" \
  --data-urlencode "limit=30"

Структура ответа

{
  "companies": [
    {
      "id": 42,
      "name": "ООО «Пример»",
      "domain": "example.com",
      "email": "in**@example.com",
      "relevance": 0.85
    }
  ],
  "totalCount": 1500,
  "skip": 0,
  "limit": 10,
  "searchMode": "hybrid",
  "normalized_query": "маркетинговое агентство",
  "displayFields": ["name", "domain", "email"],
  "columnProjection": "inferred"
}
ПолеОписание
companiesКарточки (контакты с маской)
totalCountЧисло записей по условию
searchModeФактический режим
relevanceБалл ранжирования; в hybrid у топа ~0.016, в vector ближе к 0–1
uniqueByПрименённые поля дедупа
mergeDuplicatesfalse, если склейка выключена

Пагинация и сбор ID

Максимальный limit1000. Чтобы собрать 5000 ID:

curl -sS --get "https://app.strokka.com/api/v1/companies" \
  --data-urlencode "search=маркетинговое агентство" \
  --data-urlencode "searchMode=hybrid" \
  --data-urlencode "limit=1000" \
  --data-urlencode "skip=0"

Дальше skip=1000, 2000, … См. Массовая выгрузка.

Поля карточки

ПолеОписание
idИдентификатор для /export
name / domain / urlНазвание и сайт
description / keywordsТекст
sector / region / city / addressКлассификация и гео
email / phoneКонтакты (с маской в поиске)
whatsapp / telegram / …Мессенджеры и соцсети
tech_stackСтек сайта { category, technologies[] } — через columns или фильтр tech
commentПричина merge, только у склеенных строк