
TikTok Shop Scraper
scrape.ly/store/shelfbright/tiktok-shop-scraperE-commerceSocial media
1 monthly user

Scrape 2GIS places by search term and location, or by link: phones, emails, websites, social links, address, coordinates, hours, rating, categories, reviews and photos.
Scrape business listings from 2GIS by search term and city, or straight from place links. Each place comes back with its name, address, coordinates, phones, emails, websites, social links, opening hours, rating, categories and metro stations, plus optional reviews and photos. No login, no API key, no browser. 100 places take about 10 seconds, and 1,000 places cost about $2.
Ресторан, барбершоп) and a location (for example Москва).To scrape known places, paste their 2GIS links or ids into Organization IDs or links instead.
| Field | What it does |
|---|---|
query | Search terms. Each one is searched in every location. |
locationQuery | A city, district, street, metro station or place name. Add more places in locationQueries. |
organizationIds | 2GIS place links or numeric ids. Skips the search. Up to 500. |
maxItems | Places per search term and location. 0 means no limit. |
rubricIds, filter..., sortBy | Categories, rating, average bill, delivery, Wi-Fi, website, photos, new places, sorting. |
includeContacts | Add phones, emails, websites and social links. |
maxReviewsPerPlace, reviewSortBy, reviewRatings | Reviews per place, order, and positive or negative only. |
maxMediaPerPlace | Photos and videos per place. |
cityIds, districtIds, subwayIds, buildingIds, customGeolocation | Exact search areas. IDs or names. |
domain, language | Country site for the links and the language of names and categories. |
{
"query": ["Ресторан", "Кофейня"],
"locationQuery": "Москва",
"maxItems": 100,
"includeContacts": true,
"maxReviewsPerPlace": 5,
"filterHasSite": true,
"sortBy": "rating"
}
A search around a point:
{
"query": ["аптека"],
"customGeolocation": { "type": "Point", "coordinates": [37.62141, 55.75227], "radiusKm": 2 },
"maxItems": 50
}
One item per place. Fields that 2GIS does not fill are null.
| Field | Description |
|---|---|
id, title, shortName, extension, url | Identity of the place and its 2GIS link |
address, street, houseNumber, postcode, addressComment | Address details |
country, region, city, district, living_area | Administrative location |
location | Coordinates (lat, lng) |
rubrics, category, attributeGroups, badges | Categories, amenities and awards |
totalScore, reviewsCount, ratingCount, brand | Rating of the place and of its chain |
working_hours, workingHoursIntervals, scheduleSpecial | Opening hours |
nearestStations | Closest metro stations with line and distance |
phoneText, phoneValue, email, website, socials | Contacts (needs includeContacts) |
reviews, reviewsMeta | Reviews and totals (needs maxReviewsPerPlace) |
media, mediaMeta | Photos and videos (needs maxMediaPerPlace) |
searchString, searchUrl, pageNumber, scrapedAt | Where the place was found and when |
{
"id": "70000001000000001",
"objectType": "branch",
"title": "Пример, кофейня",
"url": "https://2gis.ru/moscow/firm/70000001000000001",
"rubrics": ["Кофейни", "Кафе"],
"category": "cafe",
"totalScore": 4.8,
"reviewsCount": 104,
"address": "Тверская улица, 1",
"city": "Москва",
"district": "Тверской",
"location": { "lat": 55.757, "lng": 37.615 },
"working_hours": { "Mon": { "from": "08:00", "to": "22:00" }, "Sat": { "from": "10:00", "to": "23:00" } },
"nearestStations": [{ "name": "Охотный Ряд", "distance": 350, "comment": "Сокольническая линия" }],
"phoneText": ["+7 495 000-00-00"],
"phoneValue": ["+74950000000"],
"website": ["http://example.com"],
"socials": { "telegram": ["https://t.me/example"] },
"reviews": [
{ "id": "1000001", "rating": 5, "text": "Отличный кофе и быстрый сервис.", "dateCreated": "2026-08-02T17:13:51+07:00", "likesCount": 1 }
],
"searchString": "кофейня",
"scrapedAt": "2026-10-14T07:40:42.406Z"
}
You pay per result, and platform usage (compute and proxy traffic) is billed on top at a few hundredths of a cent per 100 places.
| What | Price |
|---|---|
| Place saved | $0.002 |
| Contacts added to a place (only when it has contact details) | $0.001 |
| Review saved | $0.0003 |
| Photo or video saved | $0.0003 |
Worked examples: 1,000 places cost $2.00. 1,000 places with contacts cost $3.00 or less. Adding 5 reviews to each of 1,000 places adds $1.50. There is no start fee. Set Max total charge on the run to cap the spend: the run stops cleanly when the limit is reached.
Is it legal? The scraper reads public listing data that anyone can see on 2gis.ru without logging in. You are responsible for how you use it, including privacy and marketing rules in your country.
Do I need a login, an API key or a proxy? No login and no key. The datacenter proxy is preselected and is all you need.
How many places can I get? A single search returns up to a few thousand places (a search for кофейня in Moscow has about 3,400). For more, split the area by district or metro station, add search terms, or use several locations. Places are de-duplicated within a run.
Why are phones or websites empty? Contacts are only added when you turn on Add contacts, and only if the business listed them on 2GIS. With Has a website on, every place has a real website; social profiles (Telegram, VK and similar) go to socials and do not count as a website.
Which language do I get? Names and categories come in the language of the country site, usually Russian. Pick another language if the country offers it, for example English in the UAE or Kazakh in Kazakhstan.
Can I schedule it or call it from code? Yes. Use schedules in the console or start runs through the API and read the dataset in JSON, CSV or Excel.
summary is usually empty.query, locationQuery, maxItems layout.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
queryarrayOptionalSearch terms
What to look for, in any language 2GIS understands, for example Ресторан, барбершоп or dentist. Each term is searched in every location. Leave empty to browse whole categories (see Categories) or to scrape known places (see Organization IDs).
locationQuerystringOptionalLocation
A city, district, street, metro station or any place name as 2GIS knows it, for example Москва or Алматы. For several cities add the others under Search area.
organizationIdsarrayOptionaldefault []Organization IDs or links
Instead of searching, scrape specific places: paste 2GIS place links (https://2gis.ru/moscow/firm/70000001113359188) or plain numeric IDs. When filled, search terms and location are not used. Up to 500.
maxItemsintegerOptionaldefault 20Places per search
How many places to save for each search term and location. 0 means every place 2GIS returns for the search (a single search tops out at a few thousand places).
Narrow the results. Some filters only apply to certain kinds of places, for example Average bill is meant for restaurants. Check on 2gis.ru that a filter exists for your search.
rubricIdsarrayOptionaldefault []Categories
Limit the search to 2GIS categories (rubrics). With no search term, every category is searched on its own.
filterRatingenumOptionaldefault ""Minimum rating
Keep only places rated at or above this score.
filterAvgPriceMinintegerOptionalAverage bill from
Minimum average bill in the local currency.
filterAvgPriceMaxintegerOptionalAverage bill up to
Maximum average bill in the local currency.
filterHasSitebooleanOptionaldefault falseHas a website
Only places that list a real website. A place whose only link is a social profile (Telegram, VK, WhatsApp, Instagram...) does not count.
filterHasPhotosbooleanOptionaldefault falseHas photos
Only places with photos.
filterHasGoodsbooleanOptionaldefault falseHas prices
Only places that publish prices or a menu.
filterHomeDeliverybooleanOptionaldefault falseDelivery
Only places that deliver.
filterTakeawaybooleanOptionaldefault falseTakeaway
Only places with food to go.
filterPaymentCardbooleanOptionaldefault falsePay by card
Only places that accept cards.
filterWifibooleanOptionaldefault falseWi-Fi
Only places with Wi-Fi for guests.
filterCreatedRecentlybooleanOptionaldefault falseNew places
Only places recently added to 2GIS.
sortByenumOptionaldefault ""Sort by
Order of the results. The default is 2GIS relevance.
Optional extras. Each review and each photo or video is charged separately, see Pricing.
includeContactsbooleanOptionaldefault falseAdd contacts
Add phones, emails, websites and social links to each place. Charged per place that has contact details.
maxReviewsPerPlaceintegerOptionaldefault 0Reviews per place
How many reviews to save for each place. 0 skips reviews.
reviewSortByenumOptionaldefault "trust"Review order
trust puts the most trusted reviews first, friends puts the newest first.
reviewRatingsenumOptionaldefault "all"Which reviews
All reviews, only positive ones (4 and 5 stars) or only negative ones (1 to 3 stars).
includeUnratedReviewsbooleanOptionaldefault trueInclude reviews without a rating
Also collect text-only reviews when Which reviews is All. They follow the rated ones.
includeReviewerDatabooleanOptionaldefault falseInclude reviewer profile
Add the public name, id and review count of each reviewer.
maxMediaPerPlaceintegerOptionaldefault 0Photos and videos per place
How many extra photos and videos to save for each place. 0 skips them.
includePhotoAuthorsbooleanOptionaldefault falseInclude photo authors
Add author details to photos and videos when 2GIS provides them.
Pin the search to exact areas. A custom area replaces the location text. Use IDs or names, up to 50 each.
locationQueriesarrayOptionaldefault []More locations
Extra locations searched with the same terms, for example Алматы and Санкт-Петербург. They are added to the main location.
cityIdsarrayOptionaldefault []Cities
City IDs or names, for example 4504222397630173 or Москва.
districtIdsarrayOptionaldefault []Districts
District IDs or names, for example Пресненский район.
subwayIdsarrayOptionaldefault []Metro stations
Station IDs or names, for example Арбатская.
buildingIdsarrayOptionaldefault []Buildings
Building IDs or names. Places within a few hundred meters are searched.
customGeolocationobjectOptionalCustom area (GeoJSON)
A GeoJSON Point with radiusKm (up to 40), a Polygon or a MultiPolygon. Coordinates are [longitude, latitude]. Example: {"type":"Point","coordinates":[37.62141,55.75227],"radiusKm":8}
Language of the text and deduplication across runs.
domainenumOptionaldefault ""Country site
Which 2GIS site the place links point to. Auto picks it from the location.
languageenumOptionaldefault ""Language
Language of names and categories. Each country offers a few: Russia has all of them, Kazakhstan kk and ru, the Gulf states ar and en. An unsupported choice falls back to the default.
enableGlobalDatasetbooleanOptionaldefault falseSkip places from earlier runs
Remember every place saved by runs that use this option and skip it next time, so repeated runs return only new places. Skipped places are not charged.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy
Proxy used to reach 2GIS. Datacenter works.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| id | string | 2GIS object ID. |
| objectType | string | null | What kind of object this is: branch (a place), building, station and so on. |
| title | string | null | Full name of the place. |
| shortName | string | null | Short name, without the type. |
| extension | string | null | Type label shown next to the name, for example кофейня. |
| url | string | null | Link to the place on 2GIS. |
| rubrics | array | null | 2GIS categories of the place. |
| attributeGroups | array | null | Features and amenities listed for the place. |
| category | string | null | Machine category such as cafe or pharmacy. |
| working_hours | object | null | Opening hours by weekday (Mon to Sun) with from and to. Days with a lunch break show the first interval. |
| workingHoursIntervals | object | null | All opening intervals for weekdays that have more than one. |
| scheduleSpecial | array | null | Special hours for specific dates. |
| summary | string | null | Short text summary when 2GIS provides one. |
| description | string | null | Description of the place. |
| totalScore | number | null | Rating from 1 to 5. |
| reviewsCount | number | null | Number of reviews. |
| ratingCount | number | null | Number of ratings. |
| postcode | string | null | Postal code. |
| addressComment | string | null | Floor, office or entrance hint. |
| badges | array | null | Award and badge texts. |
| createdAt | string | null | When the place was added to 2GIS. |
| updatedAt | string | null | When 2GIS last updated the place. |
| timezoneOffset | number | null | Time zone offset from UTC in minutes. |
| mainPhotoUrl | string | null | Main photo link. |
| location | object | null | Coordinates with lat and lng. |
| nearestStations | array | null | Nearest metro stations with distance in meters. |
| country | string | null | Country. |
| region | string | null | Region. |
| city | string | null | City. |
| district | string | null | District. |
| living_area | string | null | Neighborhood or microdistrict. |
| street | string | null | Street. |
| houseNumber | string | null | House number. |
| address | string | null | Full address line. |
| brand | object | null | Chain or company details: name, branch count and company-wide rating. |
| phoneText | array | null | Phones as displayed. Only with Add contacts. |
| phoneValue | array | null | Phones in international format. Only with Add contacts. |
| array | null | Emails. Only with Add contacts. | |
| website | array | null | Websites. Only with Add contacts. |
| socials | object | null | Social links grouped by network. Only with Add contacts. |
| reviewsMeta | object | null | Review totals, sorting and providers. |
| reviews | array | null | Collected reviews. |
| mediaMeta | object | null | Photo and video totals and albums. |
| media | array | null | Collected photos and videos. |
| searchString | string | null | The search term or category that found this place. |
| searchRubricId | string | null | Category ID for category searches. |
| searchRubricLabel | string | null | Category name for category searches. |
| searchUrl | string | null | The matching search page on 2GIS. |
| pageNumber | number | null | Result page the place was found on. |
| scrapedAt | string | null | When the place was scraped. |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Contacts | Charged once for each saved place that includes contact details (Add contacts). | $0.001 |
| Photo or video | Charged once for each photo or video saved with a place. | $0.0003 |
| Place | Charged once for each place saved to the dataset. | $0.002 |
| Review | Charged once for each review saved with a place. | $0.0003 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('cornerledger/2gis-scraper').call({
"query": [
"Ресторан"
],
"locationQuery": "Москва",
"maxItems": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run cornerledger/2gis-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=cornerledger/2gis-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Places with contacts, 3 reviews and 2 photos each.
English results from the 2GIS UAE site.
Places from the 2GIS Kazakhstan site.
Only perfectly rated places that list a website.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.