Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the 2GIS API page →
Reputation & Reviews

2GIS API & Scraper

The 2GIS API turns 2GIS, the business directory and map used across Russia, Kazakhstan, Central Asia, the Caucasus and the UAE, into JSON in five actions.

5 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

search finds businesses by words, by 2GIS category (rubric_id) or both, in one of 2GIS's regions (moscow, spb, novosibirsk, almaty, tashkent, bishkek, dubai and 200 more) or around a point with a radius, up to 50 rows a page: name and its brand, address, street and house, postcode, district and city, coordinates, categories, every phone with its display form, emails, websites, social links (VK, Telegram, WhatsApp, Instagram and others), opening hours per weekday, the branch's rating and review count, the brand's rating, photo count and the 2GIS link. Filters keep only businesses with photos, with a website, or open at a given weekday and time; results sort by relevance, rating, name or distance. detail returns one business card in full, adding 2GIS's attribute list (average bill, cuisine, payment, services), nearest metro stations and purpose. reviews pages through the public customer reviews, 50 at a time: star rating, text, dates, author name and review count, likes, photos and the business's reply. rubrics lists the category tree of a region with how many businesses each category holds, and cities lists every region 2GIS covers. One ReefAPI key, the standard { ok, data, meta, error } envelope, no 2GIS account.

Reference

Which 2GIS rating is which

A 2GIS business carries two ratings and three counts; they answer different questions. Field names as the API returns them, measured 2026-11-03 on one Moscow coffee shop.

fieldwhat it isexample (Здрасте coffee shop, Krymskaya nab. 10)
ratingThis branch's rating, 1 to 54.7
review_countReviews written about this branch114
rating_countRatings given to this branch, with or without text130
brand_ratingThe rating of the whole brand, all its branches together4.9
brand_review_countReviews of the whole brand17,258
brand_branch_countHow many branches the brand has in 2GIS103

On 10 businesses in Moscow, St Petersburg, Almaty and Tashkent, the name, address, rating, review count, coordinates, phones and websites the API returned matched the business's own 2GIS page on all 70 checks.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/2gis/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "кофейня",
    "city": "moscow"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "2gis",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 4528.7,
    "record_count": 12,
    "bytes": 4055727,
    "cache_hit": false,
    "stop_reason": "limit_reached",
    "upstream_requests": 2,
    "site_config_refreshed": true,
    "site_config_bytes": 3955153,
    "total": 5339,
    "page": 1,
    "page_size": 12,
    "total_pages": 445,
    "has_more": true,
    "next_page": 2,
    "page_out_of_range": false,
    "region": {
      "region_id": "32",
      "code": "moscow",
      "name": "Москва",
      "country_code": "ru"
    },
    "region_defaulted": false,
    "locale": "ru_RU",
    "sort": "relevance",
    "filters_applied": {},
    "rows_skipped": 0,
    "charged_credits": 2,
    "version": "1.0.0",
    "request_id": "257a7aa35b624c06",
    "queue_ms": 2.5,
    "fetched_at": "2026-11-03T13:40:22.246Z"
  },
  "data": {
    "rows": [
      {
        "org_id": "70000001113359188",
        "name": "Здрасте, кофейня",
        "name_primary": "Здрасте",
        "name_extension": "кофейня",
        "type": "branch",
        "brand_id": "70000001033681797",
        "brand_name": "Здрасте, кофейня",
        "brand_branch_count": 103,
        "address": "Крымская набережная, 10 ст2",
        "full_address": "Москва, Крымская набережная, 10 ст2",
        "address_comment": null,
        "street": "Крымская набережная",
        "house": "10 ст2",
        "postcode": "119049",
        "country": "Россия",
        "region": "Москва",
        "city": "Москва",
        "district": "Якиманка",
        "latitude": 55.735952,
        "longitude": 37.605268,
        "rubrics": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "kind": "[trimmed-depth]",
            "alias": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "kind": "[trimmed-depth]",
            "alias": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "kind": "[trimmed-depth]",
            "alias": "[trimmed-depth]"
          }
        ],
        "phones": [
          {
            "number": "[trimmed-depth]",
            "display": "[trimmed-depth]",
            "comment": "[trimmed-depth]"
          }
        ],
        "emails": [],
        "websites": [
          "http://zdraste.ru",
          "http://zdrastecafe.ru",
          "http://t.me/+X0ITYNollx1iOGEy"
        ],
        "social_links": [
          {
            "type": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "handle": "[trimmed-depth]"
          },
          {
            "type": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "handle": "[trimmed-depth]"
          }
        ],
        "other_contacts": [],
        "hours": {
          "mon": [
            "[trimmed-depth]"
          ],
          "tue": [
            "[trimmed-depth]"
          ],
          "wed": [
            "[trimmed-depth]"
          ],
          "thu": [
            "[trimmed-depth]"
          ],
          "fri": [
            "[trimmed-depth]"
          ],
          "sat": [
            "[trimmed-depth]"
          ],
          "sun": [
            "[trimmed-depth]"
          ]
        },
        "is_24x7": null,
        "hours_comment": null,
        "rating": 4.7,
        "review_count": 114,
        "rating_count": 130,
        "brand_rating": 4.9,
        "brand_review_count": 17258,
        "photo_count": 63,
        "main_photo_url": "https://i2.photo.2gis.com/main/branch/32/70000001113359188/common",
        "is_advertiser": true,
        "timezone_offset_min": 180,
        "updated_at": "2026-10-05T05:39:06Z",
        "url": "https://2gis.ru/moscow/firm/70000001113359188"
      },
      {
        "org_id": "70000001064534699",
        "name": "Comme à Paris, французская кофейня-кондитерская",
        "name_primary": "Comme à Paris",
        "name_extension": "французская кофейня-кондитерская",
        "type": "branch",
        "brand_id": "70000001018413368",
        "brand_name": "Comme à Paris, французская кофейня-кондитерская",
        "brand_branch_count": 2,
        "address": "Ленинградский проспект, 36",
        "full_address": "Москва, Ленинградский проспект, 36",
        "address_comment": "1 этаж",
        "street": "Ленинградский проспект",
        "house": "36",
        "postcode": "125167",
        "country": "Россия",
        "region": "Москва",
        "city": "Москва",
        "district": "Аэропорт",
        "latitude": 55.792065,
        "longitude": 37.561501,
        "rubrics": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "kind": "[trimmed-depth]",
            "alias": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "kind": "[trimmed-depth]",
            "alias": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "kind": "[trimmed-depth]",
            "alias": "[trimmed-depth]"
          }
        ],
        "phones": [
          {
            "number": "[trimmed-depth]",
            "display": "[trimmed-depth]",
            "comment": "[trimmed-depth]"
          }
        ],
        "emails": [
          "[redacted-email]"
        ],
        "websites": [
          "http://commeaparis.ru"
        ],
        "social_links": [
          {
            "type": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "handle": "[trimmed-depth]"
          },
          {
            "type": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "handle": "[trimmed-depth]"
          },
          {
            "type": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "handle": "[trimmed-depth]"
          }
        ],
        "other_contacts": [],
        "hours": {
          "mon": [
            "[trimmed-depth]"
          ],
          "tue": [
            "[trimmed-depth]"
          ],
          "wed": [
            "[trimmed-depth]"
          ],
          "thu": [
            "[trimmed-depth]"
          ],
          "fri": [
            "[trimmed-depth]"
          ],
          "sat": [
            "[trimmed-depth]"
          ],
          "sun": [
            "[trimmed-depth]"
          ]
        },
        "is_24x7": null,
        "hours_comment": null,
        "rating": 4.8,
        "review_count": 26,
        "rating_count": 32,
        "brand_rating": 4.8,
        "brand_review_count": 73,
        "photo_count": 28,
        "main_photo_url": "https://i5.photo.2gis.com/main/branch/32/70000001064534699/common",
        "is_advertiser": true,
        "timezone_offset_min": 180,
        "updated_at": "2026-09-15T13:30:54Z",
        "url": "https://2gis.ru/moscow/firm/70000001064534699"
      },
      {
        "org_id": "70000001114794591",
        "name": "Special, кофейня",
        "name_primary": "Special",
        "name_extension": "кофейня",
        "type": "branch",
        "brand_id": "70000001115608348",
        "brand_name": "Special, кофейня",
        "brand_branch_count": 1,
        "address": "Сельскохозяйственная улица, вл35 к6",
        "full_address": "Москва, Сельскохозяйственная улица, вл35 к6",
        "address_comment": null,
        "street": "Сельскохозяйственная улица",
        "house": "вл35 к6",
        "postcode": "129323",
        "country": "Россия",
        "region": "Москва",
        "city": "Москва",
        "district": "Останкинский",
        "latitude": 55.853786,
        "longitude": 37.623477,
        "rubrics": [
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "kind": "[trimmed-depth]",
            "alias": "[trimmed-depth]"
          },
          {
            "id": "[trimmed-depth]",
            "name": "[trimmed-depth]",
            "kind": "[trimmed-depth]",
            "alias": "[trimmed-depth]"
          }
        ],
        "phones": [
          {
            "number": "[trimmed-depth]",
            "display": "[trimmed-depth]",
            "comment": "[trimmed-depth]"
          }
        ],
        "emails": [],
        "websites": [
          "http://onespecial.ru/"
        ],
        "social_links": [],
        "other_contacts": [],
        "hours": {
          "mon": [
            "[trimmed-depth]"
          ],
          "tue": [
            "[trimmed-depth]"
          ],
          "wed": [
            "[trimmed-depth]"
          ],
          "thu": [
            "[trimmed-depth]"
          ],
          "fri": [
            "[trimmed-depth]"
          ],
          "sat": [
            "[trimmed-depth]"
          ],
          "sun": [
            "[trimmed-depth]"
          ]
        },
        "is_24x7": null,
        "hours_comment": null,
        "rating": 5,
        "review_count": 23,
        "rating_count": 29,
        "brand_rating": 5,
        "brand_review_count": 23,
        "photo_count": 208,
        "main_photo_url": "https://i8.photo.2gis.com/main/branch/32/70000001114794591/common",
        "is_advertiser": true,
        "timezone_offset_min": 180,
        "updated_at": "2026-09-14T17:00:13Z",
        "url": "https://2gis.ru/moscow/firm/70000001114794591"
      }
    ]
  }
}
Actions

What the 2GIS API does

ActionDescriptionConcrete use caseKey params
searchSearch 2GIS businesses by text and/or rubric in a city, or around a point. Up to 50 rows per page with phones, emails, websites, social links, hours, rating and review count; filters for photos, website and open-at time; sort by relevance, rating, name or distance. Either query or rubric_id is required.Support teams call search to search 2GIS businesses by text and/or rubric in a city, or around a point.query, rubric_id, city, ll, radius, ...
detailFull 2GIS business card by org_id (or firm url): everything a search row has plus the attribute list (average bill, cuisine, payment, amenities …), description, nearest metro stations and purpose.Reputation platforms call detail to get full 2GIS business card by org_id (or firm url).org_id, url, locale
reviewsPublic customer reviews of one 2GIS business, newest first, up to 50 per page with cursor paging: star rating, text, dates, author name and review count, likes, photos and the business's reply.Market researchers call reviews to get public customer reviews of one 2GIS business, newest first, up to 50 per page with cursor paging.org_id, limit, cursor, sort
rubrics2GIS rubric (category) tree for a region: the 28-or-so top groups, or the rubrics under one group (parent_id), with how many branches and organisations each holds there.B2B review analysts call rubrics to get 2GIS rubric (category) tree for a region.city, parent_id, locale
citiesEvery region 2GIS covers (207 on 2026-11-03): region id, code, name, country, locale, time zone and centre point — the values `city` accepts.Support teams call cities to get every region 2GIS covers (207 on 2026-11-03).country, locale
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/2gis/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"кофейня","city":"moscow"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.2gis.search with {"query":"кофейня","city":"moscow"}.
Use cases

Who uses this API and why

  • Lead lists: search a category in a city with has_website and collect phones, emails, websites and socials.
  • Local market mapping: rubrics for the category tree, then search by rubric_id to count and locate every business.
  • Reputation monitoring: reviews newest first for a branch, with the business's own replies.
  • Store-locator data: every branch of a brand with coordinates, hours and phones.
  • Site selection: search around a point with radius and sort=distance to see the competition nearby.
FAQ

Questions developers ask before integrating

Which countries and cities does it cover?

Every region in 2GIS's own list: 207 on 2026-11-03, of them 153 in Russia, 19 in Kazakhstan, 3 in Uzbekistan, 3 in Georgia, and Kyrgyzstan, Tajikistan, Belarus, Armenia, Azerbaijan, Cyprus and the UAE. The cities action lists them with the code to pass as city. The whole UAE is one region (dubai). The 14 Saudi regions are in the list but 2GIS holds buildings there, not businesses, so a business search there comes back empty.

Does it return phone numbers and websites?

Yes, exactly as 2GIS publishes them on the business: every phone (international number and the display form), emails, websites and social links. On 132 search rows across 11 cities, 128 had a phone, 120 a social link, 89 a website and 80 an email; Dubai rows had no emails and Bishkek rows no websites.

How many results can I get for one search?

Up to 50 per page, and the search pages through its whole result set: 'аптека' in St Petersburg had 1,903 results, 39 pages of 50; page 40 comes back empty with meta.page_out_of_range. meta.total is 2GIS's own count; three pages in a row gave 60 different businesses.

Can I search around a point instead of a city?

Yes. ll takes longitude,latitude (longitude first). With radius in metres it keeps only that circle (22 coffee shops within 500 m of Red Square); with sort=distance it orders the results nearest first.

How do I get all reviews of a business?

Call reviews with the org_id from a search row; each page has up to 50 reviews, newest first, and meta.next_cursor opens the next page. A business with 113 reviews came back in three pages (50, 50 and 4) with no review repeated. meta.review_count is 2GIS's count for the branch.

Which filters work?

rubric_id (a 2GIS category; 'кофейня' in Moscow 5,339 → 3,677 coffee shops), has_photos (→ 5,100), has_website (→ 3,140), open_at with a weekday and time (Monday 23:30 → 205), and ll with radius. Each was measured against the same search without it.

Which language are names in?

Each region's own language by default: Russian in Russia, English in Dubai, Russian in Almaty and Tashkent. locale changes it, for example en_AE or ar_AE in Dubai.

What is the org_id?

2GIS's id of the branch, the number in 2gis.ru/<city>/firm/<id>. detail and reviews take it, or the 2GIS link itself.

What is the 2GIS API?

2GIS API is a ReefAPI endpoint group for 2gis business directory as json: businesses by query, category or point across russia, kazakhstan, central asia and the uae, with phones, emails, websites, social links, hours, rating and review count, plus full business cards, customer reviews, the category tree and the region list. It returns live JSON through POST requests under /2gis/v1.

Is the 2GIS API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. 2GIS calls use the same shared credit balance as every other ReefAPI engine.

Do I need a 2GIS login or account?

No login to 2GIS is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the 2GIS data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the 2GIS API use?

2GIS actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call 2GIS from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call 2gis actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / 2gis

2GIS

2GIS business directory as JSON: businesses by query, category or point across Russia, Kazakhstan, Central Asia and the UAE, with phones, emails, websites, social links, hours, rating and review count, plus full business cards, customer reviews, the category tree and the region list.

base /2gis/v15 endpoints
post/2gis/v1/detail2 credits

Full 2GIS business card by org_id (or firm url): everything a search row has plus the attribute list (average bill, cuisine, payment, amenities …), description, nearest metro stations and purpose.

ParameterAllowed / rangeDescription
org_idoptional—2GIS branch id — a search row's org_id, the number in 2gis.ru/<city>/firm/<id>.
urloptional—Alternatively a 2GIS business address (…/firm/<id>).
localeoptional—Language of names and rubric labels, e.g. ru_RU, en_AE, ar_AE, ru_KZ, kk_KZ, uz_UZ. Default: the region's own locale.
Try in playground →
post/2gis/v1/reviews2 credits

Public customer reviews of one 2GIS business, newest first, up to 50 per page with cursor paging: star rating, text, dates, author name and review count, likes, photos and the business's reply.

ParameterAllowed / rangeDescription
org_idrequired—2GIS branch id (search row org_id).
limit = 50optional1–50Reviews per page, 1-50.
cursoroptional—meta.next_cursor from the previous page; empty for the first page.
sort = newestoptionalnewest · editedReview order.
Try in playground →
post/2gis/v1/rubrics1 credit

2GIS rubric (category) tree for a region: the 28-or-so top groups, or the rubrics under one group (parent_id), with how many branches and organisations each holds there.

ParameterAllowed / rangeDescription
cityoptional—Region code, id or Russian name (default moscow).
parent_idoptional—A top-group rubric_id to list its rubrics; empty = top groups.
localeoptional—Language of names and rubric labels, e.g. ru_RU, en_AE, ar_AE, ru_KZ, kk_KZ, uz_UZ. Default: the region's own locale.
Try in playground →
post/2gis/v1/cities2 credits

Every region 2GIS covers (207 on 2026-11-03): region id, code, name, country, locale, time zone and centre point — the values `city` accepts.

ParameterAllowed / rangeDescription
countryoptional—Only regions of this ISO country code (ru, kz, uz, kg, ae, sa …).
localeoptional—Language of region names: ru_RU (default) or en_AE, ar_AE …
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.