# Hotéis e Pousadas no Booking Brasil — Leads com E-mail e CNPJ (`paulovitor18/booking-brasil-hoteis`) Actor

Pare de ligar para a recepção atrás do e-mail do gerente. Receba hotéis, pousadas e hostels de uma cidade brasileira com e-mail e telefone comerciais, razão social, endereço fiscal e CNPJ conferido na Receita Federal. Prospecção pronta para quem vende para hotelaria. Pague só pelo lead com contato.

- **URL**: https://apify.com/paulovitor18/booking-brasil-hoteis.md
- **Developed by:** [MoreLock](https://apify.com/paulovitor18) (community)
- **Categories:** Travel, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Hotéis e Pousadas no Booking Brasil — Leads com E-mail e CNPJ

Quem vende para hotel esbarra sempre na mesma parede: a lista de propriedades é fácil de achar, o **e-mail de quem decide** não é. Este Actor lê as fichas do Booking.com de uma cidade brasileira e devolve, para cada propriedade profissional, o contato comercial que o próprio hoteleiro declarou lá — e resolve o CNPJ dele na Receita Federal.

Uma linha real, colhida de Bonito (MS) em 10/09/2026:

```
Nature Bonito Hotel · nota 9,2 (260 avaliações)
rafael@naturebonito.com.br · +55 67 9928-4•••
CNPJ 62.523.611/0001-71 → NATURE BONITO HOTEL LTDA · ATIVA · EPP
CNAE 5510801 (Hotéis) · capital social R$ 50.000 · quadro societário: 1 sócio
```

Nome, e-mail, telefone, razão social, situação cadastral e quadro societário. Sem ligar para a recepção pedindo o e-mail do gerente. Nesta página o telefone vai com os últimos dígitos ocultos e o nome do sócio fica de fora; na sua execução os dois saem completos.

### Para que serve este raspador de hotéis e pousadas

O Booking exige que a propriedade **profissional** publique dados de comerciante — a diretiva de transparência vale para o marketplace inteiro, inclusive no Brasil. É esse bloco que o Actor lê: `isTrader`, tipo de sujeito regulado, e-mail, telefone, razão social, endereço fiscal e número de registro.

Anfitrião particular não tem esse bloco, e é assim que a separação sai limpa e determinística: quem aparece com contato é empresa, com CNPJ ou registro na Junta Comercial. Nada de adivinhar pelo nome da propriedade.

Duas maneiras de usar:

- **Por cidade** — informe `Florianópolis`, `Gramado`, `Bonito`, e o Actor lê a lista de destino do Booking.
- **Por ficha** — cole URLs específicas em `urlsPropriedades` quando já souber quais propriedades quer. Só endereços de `booking.com` são aceitos; qualquer outro host é recusado antes de qualquer requisição, com o motivo na saída.

### O que vem em cada hotel: contato, CNPJ e Receita Federal

| Bloco | Campos |
|---|---|
| Propriedade | `nome`, `url`, `tipo_propriedade`, `tipo_codigo`, `nota`, `avaliacoes`, `endereco` |
| Contato comercial | `email`, `telefone`, `razao_social`, `nome_registro_comercial`, `endereco_fiscal` |
| Registro declarado | `registro_declarado`, `registro_tipo`, `registro_motivo`, `cnpj` |
| Receita Federal | `receita` (razão social oficial, situação cadastral, porte, capital social, CNAE, município/UF, sócios), `receita_status`, `receita_bate_com_declarado` |
| Auditoria | `cobrado_contato`, `cobrado_enriquecimento`, `contato_repetido_na_execucao`, `cnpj_repetido_na_execucao`, `destino_id`, `coletado_em` |

O campo `receita_bate_com_declarado` cruza a razão social oficial com a que o hoteleiro digitou no Booking. Quando dá `false`, quase sempre é nome fantasia no lugar da razão social — vale a conferência antes de mandar contrato.

Dois campos merecem explicação, porque a fonte é confusa e o Actor não repassa a confusão:

- **`tipo_propriedade`** sai do código de tipo da própria ficha (`tipo_codigo`: 204 hotel, 216 pousada, 203 hostel, 208 B\&B). O rótulo que o Booking publica no `ld+json` diz "Hotel" para quase tudo — ele fica em `tipo_no_ld_json`, para quem quiser conferir.
- **`endereco.city`** é a cidade **provada**: a do destino consultado, confirmada pelo identificador de destino da própria ficha. O campo de cidade da fonte costuma trazer o logradouro, e por isso ele sai separado, em `endereco.city_declarada_no_booking`, com `endereco.city_prova` dizendo como a cidade foi provada. Em execução por URL direta não há destino consultado: `city` vem nulo, com o motivo.

### Entrada de exemplo

```json
{
  "cidade": "Florianópolis",
  "tipos": ["hotel", "pousada", "hostel"],
  "maxPropriedades": 40,
  "apenasComContato": true,
  "resolverCNPJ": true
}
```

### Saída de exemplo: um hotel real com CNPJ resolvido

Item de uma execução real (run `268Xxrb2LzKaGyOGM`), com o telefone mascarado e o nome do sócio removido só aqui na página:

```json
{
  "item_id": "nature-bonito",
  "url": "https://www.booking.com/hotel/br/nature-bonito.pt-br.html",
  "nome": "Nature Bonito Hotel",
  "tipo_propriedade": "Hotel",
  "tipo_codigo": 204,
  "tipo_no_ld_json": "Hotel",
  "destino_id": "-630754",
  "nota": 9.2,
  "avaliacoes": 260,
  "endereco": {
    "street": "R. Antônio Aley, 77, Bonito, CEP 79290-000, Brasil",
    "city": "Bonito",
    "city_prova": "destino -630754 do Booking: o identificador de destino da ficha bate com o da cidade pedida",
    "city_declarada_no_booking": "R. Antônio Aley, 77",
    "region": "Mato Grosso do Sul",
    "postal_code": "79290-000"
  },
  "cidade_consultada": "Bonito",
  "contato_status": "business",
  "email": "rafael@naturebonito.com.br",
  "telefone": "+55679928 4•••",
  "razao_social": "Nature Bonito Hotel",
  "endereco_fiscal": { "line1": "ANTONIO ALLEY, 77", "city": "Bonito", "state": "Mato Grosso do Sul", "postalCode": "79290000" },
  "registro_declarado": "62.523.611/0001-71",
  "registro_tipo": "cnpj",
  "cnpj": "62.523.611/0001-71",
  "receita": {
    "razao_social": "NATURE BONITO HOTEL LTDA",
    "nome_fantasia": "NATURE BONITO HOTEL",
    "situacao_cadastral": "ATIVA",
    "porte": "EMPRESA DE PEQUENO PORTE",
    "capital_social": 50000,
    "cnae_principal": "5510801 - Hotéis",
    "municipio": "BONITO",
    "uf": "MS",
    "socios": ["(1 sócio; o nome sai na sua execução)"]
  },
  "receita_status": "resolvido",
  "receita_bate_com_declarado": false,
  "cobrado_contato": true,
  "cobrado_enriquecimento": true,
  "coletado_em": "2026-09-10T08:19:47.767Z"
}
```

### O que este Actor entrega além da ficha do Booking

Existe mais de um raspador do Booking que devolve contato de hoteleiro. O que este entrega, campo a campo:

- **O CNPJ resolvido na Receita Federal**: razão social oficial, situação cadastral, porte, capital social, CNAE principal e quadro societário — não só o número que o hoteleiro digitou.
- **A conferência entre os dois**: `receita_bate_com_declarado` diz se a razão social oficial confere com a declarada no Booking. É o campo que separa cadastro pronto de cadastro para revisar.
- **A prova de que a propriedade pertence à cidade que você pediu**: `destino_id` é o identificador de destino da própria ficha, e ele tem de bater com o da cidade consultada. Cidade não é adivinhada pelo texto do endereço.
- **A abstenção declarada**: registro de 14 dígitos que reprova no dígito verificador, NIRE de 11 dígitos e CNPJ sem registro na Receita saem marcados, com o motivo — e sem cobrança.

### Parâmetros da busca por cidade

| Campo | Tipo | Padrão | O que faz |
|---|---|---|---|
| `cidade` | texto | `Florianópolis` | Cidade ou região do Brasil, como você digitaria na busca do Booking. |
| `tipos` | lista | `hotel, pousada, hostel` | Filtra pelo código de tipo da própria ficha. `bnb` também está disponível. |
| `maxPropriedades` | inteiro | `40` | Teto de propriedades entregues na execução. Nunca sai mais do que isso: o slot é reservado antes de a ficha ser lida. |
| `apenasComContato` | booleano | `false` | Ligado, só saem as propriedades com contato comercial. Desligado, as demais saem de graça com o motivo. |
| `resolverCNPJ` | booleano | `true` | Consulta a Receita Federal quando o registro declarado é um CNPJ válido. |
| `urlsPropriedades` | lista | `[]` | Fichas específicas do Booking. Tem precedência sobre a cidade. Só `booking.com`. |
| `concorrencia` | inteiro | `3` | Fichas lidas em paralelo. Acima de 4 o risco de bloqueio sobe. |
| `orcamentoDescobertaSegundos` | inteiro | `150` | Teto de tempo só para a fase de busca. |
| `maxPaginasSrp` | inteiro | `8` | Teto de páginas de busca varridas. |
| `proxyConfiguration` | objeto | residencial BR | O booking.com recusa IP de datacenter. Não altere sem necessidade. |

### Quantos hotéis por cidade a execução entrega

Esta seção existe porque a alternativa seria vender completude inexistente. Os números abaixo saem de duas execuções reais de 10/09/2026, e todos eles saem também no registro `OUTPUT` da sua.

**A lista de destino do Booking entrega até 25 propriedades por cidade, e é dela que a execução parte.** Em Bonito (MS) a leitura é esta: a página de destino respondeu com **25 propriedades**, o próprio Booking declara **261 hotéis e lugares para ficar** no título dessa página, e a execução entregou **25 linhas** (run `268Xxrb2LzKaGyOGM`). São três números diferentes, e o Actor publica os três com o nome do que cada um é — `slugs_encontrados_na_descoberta`, `total_declarado_pelo_booking`, `itens_entregues` — em vez de uma porcentagem que misture populações diferentes.

Em São Paulo, mesma leitura em outra escala: a descoberta alcançou **60 propriedades**, o Booking declara **12.982** para o destino, e a execução entregou as **40** pedidas em `maxPropriedades` (run `ElcXd9qTdrMcyQZ00`).

Depois da lista de destino, o Actor amplia pelo sitemap do Booking — mas só entra no resultado a ficha que **prova** pertencer à cidade: o identificador de destino da própria ficha tem de bater com o da cidade pedida. Na execução de Bonito os shards lidos trouxeram **74.283 endereços brasileiros**, deles **65 candidatos** entraram na fila por trazerem o nome da cidade no endereço, e **nenhum** virou linha nova — 37 eram casa de temporada ou apartamento em vez de hotel, pousada ou hostel, 26 ficavam em outro destino, e 2 não traziam como provar a cidade. Ampliação com prova rende pouco em cidade pequena, e é assim mesmo: o contrário seria entregar hotel de outra cidade.

Quando o total do destino não puder ser identificado com confiança, `total_declarado_pelo_booking` vem **nulo**, com o motivo ao lado. Esse número não é estimado.

Traduzindo para a decisão de compra:

- Cidade pequena ou média: você recebe a lista de destino inteira, que costuma ser o mercado profissional relevante.
- Capital: você recebe as propriedades que o Booking coloca na lista de destino, não as milhares de acomodações da cidade.
- Precisa de mais? Rode a mesma execução para as cidades vizinhas, ou passe as fichas em `urlsPropriedades`.

### Como extrair mais leads de hotéis por execução

- **Ligue `apenasComContato`** quando o destino for um CRM: só entram as linhas acionáveis.
- **Deixe `apenasComContato` desligado** quando quiser mapear o mercado: as propriedades sem contato saem de graça, com o motivo, e servem de censo.
- **`concorrencia` acima de 4 não compensa.** O ganho de tempo é pequeno e o risco de queimar a sessão sobe.
- **Rode por cidade, não por estado.** O identificador de destino é de cidade; um estado devolve a lista da região, mais rasa.
- **Confira `receita_bate_com_declarado`** antes de usar a razão social em documento.

### Casos de uso: prospecção B2B para hotelaria

1. **Prospecção B2B para hotelaria** — PMS, channel manager, motor de reservas, lavanderia industrial, amenities, enxoval: e-mail e telefone comerciais por cidade, com o CNPJ pronto para o cadastro do cliente.
2. **Qualificação de crédito e cobrança** — situação cadastral, porte e capital social direto da Receita, antes de faturar a prazo.
3. **Estudo de mercado hoteleiro** — nota, número de avaliações e tipo de propriedade cruzados com CNAE e porte da empresa que opera.
4. **Due diligence de aquisição** — quadro societário e endereço fiscal da empresa por trás da pousada anunciada.
5. **Enriquecimento de base existente** — passe suas URLs do Booking em `urlsPropriedades` e receba contato e CNPJ para cada uma.
6. **Território de vendas** — rode por cidade e monte a carteira do representante com a densidade real de hotéis profissionais.

### Perguntas frequentes sobre os dados de hotéis

**De onde vem o e-mail? É um endereço adivinhado?**
Não. É o e-mail que a própria propriedade publicou no bloco de informações de comerciante do Booking. Nada é inferido, montado por padrão (`contato@dominio`) nem comprado de lista.

**Por que algumas propriedades vêm sem contato?**
Porque são anfitriões particulares. Sem o bloco de comerciante não há e-mail nem razão social — e essa é uma resposta legítima, não uma falha. A linha sai mesmo assim, com `contato_status` e o motivo, e **não é cobrada**. Vale também para o caso raro do comerciante marcado como empresa que não publicou contato nenhum: a linha sai como `business_sem_contato_publicado` e igualmente não é cobrada.

**E quando o hoteleiro digitou o número errado?**
Acontece, e o Actor não disfarça. Registro de 14 dígitos que reprova no dígito verificador vira `cnpj_invalid_dv`, a Receita não é consultada e o enriquecimento não é cobrado. Registro de 11 dígitos é NIRE da Junta Comercial, não CPF: não existe consulta pública gratuita, então o Actor se abstém e diz por quê.

**Vocês entregam dados de pessoa física?**
Não se extrai dado pessoal de hóspede nem de anfitrião pessoa física: avaliações e nomes de hóspedes ficam de fora, e quando o Booking marca a propriedade como sujeito regulado do tipo `INDIVIDUAL` o bloco de contato inteiro é descartado, com `individual_lgpd_excluded` na linha. O que aparece de pessoa natural é uma coisa só, e por um motivo declarado: **o quadro societário vindo do registro público de CNPJ da Receita Federal**, em `receita.socios`. É registro empresarial público, entregue porque é ele que responde com quem se fala do lado societário — a mesma informação que qualquer consulta de CNPJ devolve.

**A execução pode terminar sem nenhuma linha?**
Pode, e sem cobrança. Cidade digitada errada é o caso comum: o Booking redireciona destino inexistente para a página do país, e o Actor detecta isso pelo endereço final e para, em vez de devolver hotéis do Brasil inteiro como se fossem da sua cidade.

**Preciso de proxy residencial?**
Sim, e ele já vem configurado. O booking.com responde com corpo vazio para IP de datacenter em 100% das requisições — foi medido inclusive no `robots.txt`.

**O que fica guardado da minha execução?**
O dataset com as linhas e um registro `OUTPUT` com as contagens. A evidência de cobertura é gravada como resumo estruturado (`EVIDENCIA-DA-DESCOBERTA`: a página consultada, quantas fichas ela listou, o total declarado e a âncora de onde ele saiu). O HTML cru das páginas do Booking **não** é guardado: ele carrega avaliações e nomes de hóspedes, que são dado de terceiro e não têm uso para você.

**Com que frequência vale rodar?**
Contato e razão social mudam pouco; situação cadastral e quadro societário mudam mais. Para prospecção, uma execução por trimestre por cidade dá conta.

### Preços

Este Actor cobra por resultado (Pay Per Event), com **dois eventos separados de propósito**:

| Evento | Preço | Quando dispara |
|---|---|---|
| `propriedade_com_contato` | **US$ 0,008** | A linha saiu com contato comercial de verdade: e-mail, telefone ou razão social. Uma vez por contato distinto na execução. |
| `cnpj_resolvido_receita` | **US$ 0,006** | O CNPJ resolveu na Receita Federal. Uma vez por CNPJ distinto na execução. |

**Uma execução real, para você fazer a conta antes de rodar.** Bonito (MS), 25 propriedades entregues: 22 vieram com contato comercial e 21 foram cobradas — duas fichas dividiam o mesmo e-mail, e rede hoteleira é um lead só; 10 CNPJs resolveram na Receita e 9 foram cobrados. A conta fecha em 21 × US$ 0,008 + 9 × US$ 0,006 = **US$ 0,22** pela cidade inteira.

Numa capital, com o teto em 40 propriedades, essa conta costuma ficar entre US$ 0,20 e US$ 0,40: nem toda ficha traz contato, e nem todo registro declarado é CNPJ válido.

O que **nunca** é cobrado:

- propriedade de anfitrião particular, sem bloco de comerciante;
- comerciante que não publicou contato nenhum;
- registro descartado por LGPD (`INDIVIDUAL`);
- registro de 14 dígitos com dígito verificador inválido;
- NIRE de 11 dígitos, que não tem consulta pública gratuita;
- CNPJ válido sem registro na Receita (404);
- ficha que não existe mais no Booking;
- contato repetido dentro da mesma execução: a linha sai marcada com `contato_repetido_na_execucao` e o endereço de e-mail é cobrado uma vez;
- CNPJ repetido dentro da mesma execução;
- qualquer execução que termine sem linha.

### Actors irmãos da suíte MoreLock

Mesma cozinha, mesmos padrões de abstenção honesta:

- **Consulta CNPJ em Lote** — dados da Receita Federal para uma lista de CNPJs.
- **Google Maps Brasil Leads** — negócios locais com telefone, site e CNPJ resolvido.
- **Reclame Aqui Scraper** — reputação de empresas brasileiras.
- **Consulta CEP em Lote** — endereços normalizados para uma lista de CEPs.

### Histórico de versões

- **0.1** — Primeira versão de produção. Busca por cidade pela lista de destino do Booking, ampliação pelo sitemap com conferência do identificador de destino, filtro de tipo pelo código da ficha, contato sob regra de LGPD, CNPJ resolvido na Receita Federal e cobrança em dois eventos separados.

### Suporte

Abra uma issue na aba **Issues** do Actor. Se a execução tiver terminado sem o que você esperava, mande junto o `runId`: o registro `OUTPUT` guarda a contagem de cada descarte e o motivo, e é por ele que a investigação começa.

# Actor input Schema

## `cidade` (type: `string`):

Cidade ou região do Brasil, como você digitaria na busca do Booking. Ex.: Florianópolis, Gramado, Bonito, Porto de Galinhas.

## `tipos` (type: `array`):

Filtro aplicado pelo próprio Booking. Hotel, pousada e hostel são os tipos profissionais; casas e apartamentos de particular ficam de fora, e é por isso que a taxa de contato é alta.

## `maxPropriedades` (type: `integer`):

Quantas propriedades detalhar nesta execução. A busca para assim que a fila enche.

## `apenasComContato` (type: `boolean`):

Ligado, o resultado traz apenas as propriedades com e-mail, telefone e razão social. Desligado, as demais também saem — de graça, com o motivo de não terem contato.

## `resolverCNPJ` (type: `boolean`):

Consulta o CNPJ declarado e devolve razão social oficial, situação cadastral, CNAE, porte, capital social e quadro societário.

## `urlsPropriedades` (type: `array`):

Preencha para detalhar fichas específicas em vez de buscar por cidade. Aceita a URL completa do Booking ou só o slug. Tem precedência sobre a cidade.

## `concorrencia` (type: `integer`):

Quantas fichas são lidas ao mesmo tempo no mesmo token. Acima de 4 o risco de bloqueio sobe.

## `orcamentoDescobertaSegundos` (type: `integer`):

Teto de tempo só para a fase de busca por cidade. Estourou, o actor para de procurar e detalha o que já achou.

## `maxPaginasSrp` (type: `integer`):

Cada página da busca do Booking traz cerca de 25 propriedades.

## `proxyConfiguration` (type: `object`):

O booking.com recusa IP de datacenter: responde 202 com corpo vazio em 100% das requisições. Proxy residencial do Brasil é obrigatório — não altere sem necessidade.

## Actor input object example

```json
{
  "cidade": "Florianópolis",
  "tipos": [
    "hotel",
    "pousada",
    "hostel"
  ],
  "maxPropriedades": 40,
  "apenasComContato": false,
  "resolverCNPJ": true,
  "urlsPropriedades": [],
  "concorrencia": 3,
  "orcamentoDescobertaSegundos": 150,
  "maxPaginasSrp": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}
```

# Actor output Schema

## `leads` (type: `string`):

Uma linha por propriedade, com contato comercial, registro declarado e dados da Receita Federal quando o CNPJ resolve.

## `resumo` (type: `string`):

Cobertura da busca por cidade, contagem por situação de contato e de registro, e a conta do que foi cobrado.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "cidade": "Florianópolis",
    "tipos": [
        "hotel",
        "pousada",
        "hostel"
    ],
    "maxPropriedades": 40,
    "apenasComContato": false,
    "resolverCNPJ": true,
    "urlsPropriedades": [],
    "concorrencia": 3,
    "orcamentoDescobertaSegundos": 150,
    "maxPaginasSrp": 8,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("paulovitor18/booking-brasil-hoteis").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "cidade": "Florianópolis",
    "tipos": [
        "hotel",
        "pousada",
        "hostel",
    ],
    "maxPropriedades": 40,
    "apenasComContato": False,
    "resolverCNPJ": True,
    "urlsPropriedades": [],
    "concorrencia": 3,
    "orcamentoDescobertaSegundos": 150,
    "maxPaginasSrp": 8,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("paulovitor18/booking-brasil-hoteis").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "cidade": "Florianópolis",
  "tipos": [
    "hotel",
    "pousada",
    "hostel"
  ],
  "maxPropriedades": 40,
  "apenasComContato": false,
  "resolverCNPJ": true,
  "urlsPropriedades": [],
  "concorrencia": 3,
  "orcamentoDescobertaSegundos": 150,
  "maxPaginasSrp": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}' |
apify call paulovitor18/booking-brasil-hoteis --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,paulovitor18/booking-brasil-hoteis"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/SyTTujGE7tzLvDAd2/builds/Ob6ssmgBZfb2hmLWs/openapi.json
