# Tiendanube & Nuvemshop Store Finder — Stores, Products & Prices (`imagiever_ar/tiendanube-nuvemshop-store-finder`) Actor

Profile public Tiendanube/Nuvemshop stores and extract public product facts and prices without login, personal data collection, proxies, or anti-bot evasion.

- **URL**: https://apify.com/imagiever\_ar/tiendanube-nuvemshop-store-finder.md
- **Developed by:** [Hernan Borgarino](https://apify.com/imagiever_ar) (community)
- **Stats:** 2 total users, 1 monthly users, 75.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 store profiles

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Tiendanube & Nuvemshop Store Finder — Stores, Products & Prices

**Languages:** English · [Español](#español) · [Português](#português)

Profile public **Tiendanube / Tienda Nube** and **Nuvemshop** stores from supplied store URLs and extract structured store and product facts for LATAM ecommerce research.

Use it for ecommerce market research, store intelligence, lead generation at the **store/domain level**, agency research, logistics, payments, wholesale prospecting, brand monitoring, and catalog analysis.

**Search keywords:** tiendas Tiendanube, tienda online, catálogo, productos, precios, ecommerce LATAM; lojas Nuvemshop, loja virtual, catálogo, produtos, preços, ecommerce Brasil.

> Current public functionality is **catalog mode**: you provide store URLs. `discover` mode is reserved for a later phase and is not implemented yet.

### What it extracts

#### Store records

- Store name and domain
- Tiendanube or Nuvemshop platform classification
- Country and currency when they can be inferred safely
- Default/custom-domain signals
- Catalog size estimate from public sitemap data
- Observed minimum, maximum, and median product prices
- Top categories when available
- Public brand social links
- Source store URL
- Status: `ok`, `blocked`, `platform_mismatch`, `parse_failed`, or `unreachable`

#### Product records

- Product name
- Price and compare-at / strikethrough price when available
- Currency
- Stock status
- SKU when public
- Category path when available
- Variant count
- Product URL and image URL
- Scrape timestamp
- `needs_review` flag for unusually deep discounts

### Safety and data policy

This Actor is intentionally conservative.

- Public pages only.
- No login, account, admin, checkout, or authenticated pages.
- No CAPTCHA solving, fingerprint spoofing, residential proxies, or anti-bot evasion.
- If a store returns a Cloudflare challenge, CAPTCHA, `403`, or `429`, the Actor stops that store and continues with the rest.
- No email addresses, phone numbers, WhatsApp links, physical addresses, or personal names are collected.
- Store names, domains, and public brand social links are allowed.
- No product images are downloaded; only public image URLs are returned.
- Every store/product result contains a source URL.
- Requests are serialized per store and intentionally rate-limited.

### Apify daily health-test prefill

The Apify prefill is intentionally small and redundant. It currently uses three public stores verified for this release, one each from Argentina, Brazil, and Mexico, with `maxStores: 3` and `maxProductsPerStore: 5`. The normal user default for `maxProductsPerStore` remains `500`.

If the input is empty/invalid, all supplied stores fail, or the run produces no usable store/product result, the Actor writes a free `record_type: "run_diagnostic"` row to the default dataset and finishes successfully instead of crashing. Diagnostic rows never use a custom PPE event.

### Known limitations

Some Tiendanube/Nuvemshop themes render several product cards, recommendation widgets, and `data-variants` blocks on the same product page. The Actor uses a **fail-closed product identity policy**: it returns a product only when the parsed data can be proven to belong to the URL being visited.

If a theme does not provide enough structural evidence to prove that identity, the product is discarded with an explicit parse reason. If no product page can be parsed safely, the store record is returned with `status: "parse_failed"`. **Ambiguous products and `parse_failed` store profiles are not charged.**

This is deliberate: a missing product is safer than returning the price or name of a different recommended product.

Other limitations:

- Catalog estimates depend on public sitemap coverage and can differ from the merchant's internal catalog count.
- Prices, stock, and catalog contents are point-in-time observations and may change after the run.
- A migrated or stale Tiendanube/Nuvemshop hostname can resolve to another ecommerce platform; these are returned as `platform_mismatch` and are not charged as verified store profiles.
- `discover` mode is not available yet.

### Input

#### Real catalog-mode example

```json
{
  "mode": "catalog",
  "storeUrls": [
    "https://www.almacendeetiquetas.com.ar/"
  ],
  "maxStores": 1,
  "maxProductsPerStore": 3,
  "includeProducts": true,
  "onlyInStock": false
}
```

Main options:

| Field | Type | Default | Description |
|---|---|---:|---|
| `mode` | string | `catalog` | `catalog` is currently implemented. `discover` is not available yet. |
| `storeUrls` | string\[] | `[]` | Public Tiendanube/Nuvemshop store URLs. |
| `keywords` | string\[] | `[]` | Optional filter applied to product names/categories. |
| `maxStores` | integer | `100` | Maximum supplied stores processed. |
| `maxProductsPerStore` | integer | `500` | Maximum product records returned per store. |
| `includeProducts` | boolean | `true` | Return product rows in addition to store profiles. |
| `onlyInStock` | boolean | `false` | Return only products reported in stock. |

### Real output example

The following records are from the Phase D QA dataset and contain no personal contact data.

#### Store

```json
{
  "record_type": "store",
  "store_id": null,
  "store_name": "Almacen de Etiquetas",
  "domain": "www.almacendeetiquetas.com.ar",
  "default_subdomain": null,
  "has_custom_domain": true,
  "platform": "tiendanube",
  "country": "AR",
  "currency": "ARS",
  "country_inference_method": "product_currency",
  "top_categories": [],
  "catalog_size_estimate": 15,
  "price_min": 3390,
  "price_max": 38000,
  "price_median": 17500,
  "social_links": {
    "instagram": "https://instagram.com/almacendeetiquetas",
    "facebook": "https://www.facebook.com/230969320640693",
    "tiktok": ""
  },
  "store_url": "https://www.almacendeetiquetas.com.ar/",
  "first_seen_at": "2026-09-22T15:47:33.191Z",
  "last_checked_at": "2026-09-22T15:47:45.675Z",
  "status": "ok"
}
```

#### Product

```json
{
  "record_type": "product",
  "store_domain": "www.almacendeetiquetas.com.ar",
  "product_name": "ETIQUETAS DE TALLES POR LETRA PLANCHA 360 UNIDADES",
  "price": 3390,
  "compare_at_price": null,
  "currency": "ARS",
  "in_stock": true,
  "sku": null,
  "category_path": [],
  "variant_count": 10,
  "product_url": "https://www.almacendeetiquetas.com.ar/productos/etiquetas-de-talles-por-letra-plancha-455-unidades/",
  "image_url": "http://dcdn-us.mitiendanube.com/stores/454/970/products/etiquetas-fondo-blanco-14fc2d150dca975f3016491549173106-640-0.webp",
  "scraped_at": "2026-09-22T15:47:37.732Z",
  "needs_review": false
}
```

### Pricing

Pay per event (PPE):

- Actor start: Apify synthetic `apify-actor-start` event at Apify's default price.
- Verified store profile (`status: "ok"`): **$0.004** per store.
- Successfully parsed product: **$0.0015** per product.
- Diagnostic store profiles such as `parse_failed`, `blocked`, or `platform_mismatch`: **not charged** as store profiles.
- `run_diagnostic` health records: **free** (no custom PPE event).
- The synthetic `apify-default-dataset-item` event must remain disabled to avoid duplicate billing.

### Notes

- The Actor does not provide contact enrichment and intentionally excludes PII.
- Results should be independently verified before consequential business decisions.

***

### Español

Analizá tiendas públicas de **Tiendanube / Tienda Nube** y **Nuvemshop** a partir de URLs de tiendas proporcionadas y extraé datos estructurados de tiendas y productos para investigación de ecommerce en LATAM.

Puede usarse para investigación de mercado ecommerce, inteligencia de tiendas, generación de leads a **nivel tienda/dominio**, análisis para agencias, logística, pagos, prospección mayorista, monitoreo de marcas y análisis de catálogos.

**Palabras clave de búsqueda:** tiendas Tiendanube, tienda online, catálogo, productos, precios, ecommerce LATAM; lojas Nuvemshop, loja virtual, catálogo, produtos, preços, ecommerce Brasil.

> La funcionalidad pública actual es el **modo catálogo**: vos proporcionás las URLs de las tiendas. El modo `discover` queda reservado para una fase posterior y todavía no está implementado.

#### Qué extrae

##### Registros de tienda

- Nombre y dominio de la tienda
- Clasificación de plataforma: Tiendanube o Nuvemshop
- País y moneda cuando pueden inferirse de forma segura
- Señales de subdominio por defecto o dominio personalizado
- Estimación del tamaño del catálogo a partir de sitemaps públicos
- Precio mínimo, máximo y mediano observado
- Categorías principales cuando están disponibles
- Enlaces sociales públicos de la marca
- URL fuente de la tienda
- Estado: `ok`, `blocked`, `platform_mismatch`, `parse_failed` o `unreachable`

##### Registros de producto

- Nombre del producto
- Precio y precio anterior/tachado cuando está disponible
- Moneda
- Estado de stock
- SKU cuando es público
- Ruta de categoría cuando está disponible
- Cantidad de variantes
- URL del producto y URL de imagen
- Fecha/hora de extracción
- Flag `needs_review` para descuentos inusualmente altos

#### Seguridad y política de datos

Este Actor está diseñado para ser deliberadamente conservador.

- Solo páginas públicas.
- Sin login, cuenta, admin, checkout ni páginas autenticadas.
- Sin resolución de CAPTCHA, spoofing de fingerprint, proxies residenciales ni evasión anti-bot.
- Si una tienda devuelve un challenge de Cloudflare, CAPTCHA, `403` o `429`, el Actor detiene esa tienda y continúa con las demás.
- No se recopilan correos electrónicos, teléfonos, enlaces de WhatsApp, direcciones físicas ni nombres de personas.
- Se permiten nombres de tienda, dominios y enlaces sociales públicos de la marca.
- No se descargan imágenes de productos; solo se devuelven URLs públicas de imagen.
- Cada resultado de tienda/producto incluye una URL fuente.
- Las solicitudes se serializan por tienda y se limitan intencionalmente en frecuencia.

#### Prefill del test diario de Apify

El prefill de Apify es deliberadamente chico y redundante. Usa tres tiendas públicas verificadas para esta versión, una de Argentina, una de Brasil y una de México, con `maxStores: 3` y `maxProductsPerStore: 5`. El valor por defecto normal para usuarios de `maxProductsPerStore` sigue siendo `500`.

Si el input está vacío o es inválido, todas las tiendas fallan, o la corrida no produce ningún resultado útil de tienda/producto, el Actor escribe gratis un registro `record_type: "run_diagnostic"` en el dataset por defecto y termina `SUCCEEDED` en vez de crashear. Los diagnósticos no usan eventos PPE custom.

#### Limitaciones conocidas

Algunos temas de Tiendanube/Nuvemshop renderizan varias tarjetas de producto, widgets de recomendaciones y bloques `data-variants` dentro de la misma página de producto. El Actor aplica una política de **identidad de producto con fallo cerrado**: solo devuelve un producto cuando puede probarse que los datos extraídos pertenecen a la URL visitada.

Si un tema no aporta suficiente evidencia estructural para demostrar esa identidad, el producto se descarta con un motivo de parseo explícito. Si ninguna ficha de producto puede parsearse de forma segura, se devuelve el registro de tienda con `status: "parse_failed"`. **Los productos ambiguos y los perfiles de tienda `parse_failed` no se cobran.**

Esto es intencional: es preferible omitir un producto antes que devolver el precio o el nombre de otro producto recomendado.

Otras limitaciones:

- Las estimaciones de catálogo dependen de la cobertura del sitemap público y pueden diferir del conteo interno del comercio.
- Precios, stock y contenido del catálogo son observaciones puntuales y pueden cambiar después de la corrida.
- Un hostname viejo o migrado de Tiendanube/Nuvemshop puede resolver a otra plataforma ecommerce; esos casos se devuelven como `platform_mismatch` y no se cobran como perfiles de tienda verificados.
- El modo `discover` todavía no está disponible.

#### Input

##### Ejemplo real en modo catálogo

```json
{
  "mode": "catalog",
  "storeUrls": [
    "https://www.almacendeetiquetas.com.ar/"
  ],
  "maxStores": 1,
  "maxProductsPerStore": 3,
  "includeProducts": true,
  "onlyInStock": false
}
```

Opciones principales:

| Campo | Tipo | Default | Descripción |
|---|---|---:|---|
| `mode` | string | `catalog` | `catalog` está implementado actualmente. `discover` todavía no está disponible. |
| `storeUrls` | string\[] | `[]` | URLs públicas de tiendas Tiendanube/Nuvemshop. |
| `keywords` | string\[] | `[]` | Filtro opcional aplicado a nombres/categorías de productos. |
| `maxStores` | integer | `100` | Máximo de tiendas proporcionadas a procesar. |
| `maxProductsPerStore` | integer | `500` | Máximo de registros de producto devueltos por tienda. |
| `includeProducts` | boolean | `true` | Devuelve filas de producto además de perfiles de tienda. |
| `onlyInStock` | boolean | `false` | Devuelve solo productos reportados con stock. |

#### Ejemplo real de output

Los siguientes registros provienen del dataset de QA de Fase D y no contienen datos personales de contacto.

##### Tienda

```json
{
  "record_type": "store",
  "store_id": null,
  "store_name": "Almacen de Etiquetas",
  "domain": "www.almacendeetiquetas.com.ar",
  "default_subdomain": null,
  "has_custom_domain": true,
  "platform": "tiendanube",
  "country": "AR",
  "currency": "ARS",
  "country_inference_method": "product_currency",
  "top_categories": [],
  "catalog_size_estimate": 15,
  "price_min": 3390,
  "price_max": 38000,
  "price_median": 17500,
  "social_links": {
    "instagram": "https://instagram.com/almacendeetiquetas",
    "facebook": "https://www.facebook.com/230969320640693",
    "tiktok": ""
  },
  "store_url": "https://www.almacendeetiquetas.com.ar/",
  "first_seen_at": "2026-09-22T15:47:33.191Z",
  "last_checked_at": "2026-09-22T15:47:45.675Z",
  "status": "ok"
}
```

##### Producto

```json
{
  "record_type": "product",
  "store_domain": "www.almacendeetiquetas.com.ar",
  "product_name": "ETIQUETAS DE TALLES POR LETRA PLANCHA 360 UNIDADES",
  "price": 3390,
  "compare_at_price": null,
  "currency": "ARS",
  "in_stock": true,
  "sku": null,
  "category_path": [],
  "variant_count": 10,
  "product_url": "https://www.almacendeetiquetas.com.ar/productos/etiquetas-de-talles-por-letra-plancha-455-unidades/",
  "image_url": "http://dcdn-us.mitiendanube.com/stores/454/970/products/etiquetas-fondo-blanco-14fc2d150dca975f3016491549173106-640-0.webp",
  "scraped_at": "2026-09-22T15:47:37.732Z",
  "needs_review": false
}
```

#### Precios

Pay per event (PPE):

- Inicio del Actor: evento sintético de Apify `apify-actor-start` al precio por defecto de Apify.
- Perfil de tienda verificado (`status: "ok"`): **US$0,004** por tienda.
- Producto parseado correctamente: **US$0,0015** por producto.
- Perfiles de diagnóstico como `parse_failed`, `blocked` o `platform_mismatch`: **no se cobran** como perfiles de tienda.
- El evento sintético `apify-default-dataset-item` debe permanecer desactivado para evitar doble facturación.

#### Notas

- El Actor no ofrece enriquecimiento de contactos y excluye PII deliberadamente.
- Los resultados deberían verificarse de forma independiente antes de tomar decisiones empresariales relevantes.

***

### Português

Analise lojas públicas da **Tiendanube / Tienda Nube** e **Nuvemshop** a partir de URLs de lojas fornecidas e extraia dados estruturados de lojas e produtos para pesquisa de ecommerce na América Latina.

Pode ser usado para pesquisa de mercado de ecommerce, inteligência de lojas, geração de leads no **nível de loja/domínio**, pesquisa para agências, logística, pagamentos, prospecção atacadista, monitoramento de marcas e análise de catálogos.

**Palavras-chave de busca:** tiendas Tiendanube, tienda online, catálogo, productos, precios, ecommerce LATAM; lojas Nuvemshop, loja virtual, catálogo, produtos, preços, ecommerce Brasil.

> A funcionalidade pública atual é o **modo catálogo**: você fornece as URLs das lojas. O modo `discover` está reservado para uma fase futura e ainda não está implementado.

#### O que extrai

##### Registros de loja

- Nome e domínio da loja
- Classificação da plataforma: Tiendanube ou Nuvemshop
- País e moeda quando podem ser inferidos com segurança
- Sinais de subdomínio padrão ou domínio personalizado
- Estimativa do tamanho do catálogo a partir de sitemaps públicos
- Preço mínimo, máximo e mediano observado
- Principais categorias quando disponíveis
- Links sociais públicos da marca
- URL de origem da loja
- Status: `ok`, `blocked`, `platform_mismatch`, `parse_failed` ou `unreachable`

##### Registros de produto

- Nome do produto
- Preço e preço anterior/riscado quando disponível
- Moeda
- Status de estoque
- SKU quando público
- Caminho de categoria quando disponível
- Quantidade de variantes
- URL do produto e URL da imagem
- Data/hora da coleta
- Flag `needs_review` para descontos excepcionalmente altos

#### Segurança e política de dados

Este Actor é intencionalmente conservador.

- Apenas páginas públicas.
- Sem login, conta, admin, checkout ou páginas autenticadas.
- Sem resolução de CAPTCHA, spoofing de fingerprint, proxies residenciais ou evasão anti-bot.
- Se uma loja retornar um challenge do Cloudflare, CAPTCHA, `403` ou `429`, o Actor interrompe essa loja e continua com as demais.
- Não são coletados e-mails, telefones, links de WhatsApp, endereços físicos ou nomes de pessoas.
- Nomes de lojas, domínios e links sociais públicos da marca são permitidos.
- Imagens de produtos não são baixadas; apenas URLs públicas de imagem são retornadas.
- Cada resultado de loja/produto contém uma URL de origem.
- As requisições são serializadas por loja e intencionalmente limitadas em frequência.

#### Prefill do teste diário da Apify

O prefill da Apify é deliberadamente pequeno e redundante. Usa três lojas públicas verificadas para esta versão, uma da Argentina, uma do Brasil e uma do México, com `maxStores: 3` e `maxProductsPerStore: 5`. O valor padrão normal para usuários de `maxProductsPerStore` continua sendo `500`.

Se o input estiver vazio ou inválido, todas as lojas falharem, ou a execução não produzir nenhum resultado útil de loja/produto, o Actor grava gratuitamente um registro `record_type: "run_diagnostic"` no dataset padrão e termina com sucesso em vez de falhar. Diagnósticos não usam eventos PPE custom.

#### Limitações conhecidas

Alguns temas da Tiendanube/Nuvemshop renderizam vários cards de produto, widgets de recomendação e blocos `data-variants` na mesma página de produto. O Actor usa uma política de **identidade de produto com falha fechada**: só retorna um produto quando é possível provar que os dados extraídos pertencem à URL visitada.

Se um tema não fornecer evidência estrutural suficiente para comprovar essa identidade, o produto é descartado com um motivo explícito de parsing. Se nenhuma página de produto puder ser analisada com segurança, o registro da loja é retornado com `status: "parse_failed"`. **Produtos ambíguos e perfis de loja `parse_failed` não são cobrados.**

Isso é deliberado: é melhor omitir um produto do que retornar o preço ou o nome de outro produto recomendado.

Outras limitações:

- As estimativas de catálogo dependem da cobertura do sitemap público e podem diferir da contagem interna do lojista.
- Preços, estoque e conteúdo do catálogo são observações pontuais e podem mudar após a execução.
- Um hostname antigo ou migrado da Tiendanube/Nuvemshop pode resolver para outra plataforma de ecommerce; esses casos são retornados como `platform_mismatch` e não são cobrados como perfis de loja verificados.
- O modo `discover` ainda não está disponível.

#### Input

##### Exemplo real em modo catálogo

```json
{
  "mode": "catalog",
  "storeUrls": [
    "https://www.almacendeetiquetas.com.ar/"
  ],
  "maxStores": 1,
  "maxProductsPerStore": 3,
  "includeProducts": true,
  "onlyInStock": false
}
```

Principais opções:

| Campo | Tipo | Padrão | Descrição |
|---|---|---:|---|
| `mode` | string | `catalog` | `catalog` está implementado atualmente. `discover` ainda não está disponível. |
| `storeUrls` | string\[] | `[]` | URLs públicas de lojas Tiendanube/Nuvemshop. |
| `keywords` | string\[] | `[]` | Filtro opcional aplicado a nomes/categorias de produtos. |
| `maxStores` | integer | `100` | Máximo de lojas fornecidas a processar. |
| `maxProductsPerStore` | integer | `500` | Máximo de registros de produto retornados por loja. |
| `includeProducts` | boolean | `true` | Retorna linhas de produto além dos perfis de loja. |
| `onlyInStock` | boolean | `false` | Retorna apenas produtos informados como em estoque. |

#### Exemplo real de output

Os registros abaixo vêm do dataset de QA da Fase D e não contêm dados pessoais de contato.

##### Loja

```json
{
  "record_type": "store",
  "store_id": null,
  "store_name": "Almacen de Etiquetas",
  "domain": "www.almacendeetiquetas.com.ar",
  "default_subdomain": null,
  "has_custom_domain": true,
  "platform": "tiendanube",
  "country": "AR",
  "currency": "ARS",
  "country_inference_method": "product_currency",
  "top_categories": [],
  "catalog_size_estimate": 15,
  "price_min": 3390,
  "price_max": 38000,
  "price_median": 17500,
  "social_links": {
    "instagram": "https://instagram.com/almacendeetiquetas",
    "facebook": "https://www.facebook.com/230969320640693",
    "tiktok": ""
  },
  "store_url": "https://www.almacendeetiquetas.com.ar/",
  "first_seen_at": "2026-09-22T15:47:33.191Z",
  "last_checked_at": "2026-09-22T15:47:45.675Z",
  "status": "ok"
}
```

##### Produto

```json
{
  "record_type": "product",
  "store_domain": "www.almacendeetiquetas.com.ar",
  "product_name": "ETIQUETAS DE TALLES POR LETRA PLANCHA 360 UNIDADES",
  "price": 3390,
  "compare_at_price": null,
  "currency": "ARS",
  "in_stock": true,
  "sku": null,
  "category_path": [],
  "variant_count": 10,
  "product_url": "https://www.almacendeetiquetas.com.ar/productos/etiquetas-de-talles-por-letra-plancha-455-unidades/",
  "image_url": "http://dcdn-us.mitiendanube.com/stores/454/970/products/etiquetas-fondo-blanco-14fc2d150dca975f3016491549173106-640-0.webp",
  "scraped_at": "2026-09-22T15:47:37.732Z",
  "needs_review": false
}
```

#### Preços

Pay per event (PPE):

- Início do Actor: evento sintético da Apify `apify-actor-start` pelo preço padrão da Apify.
- Perfil de loja verificado (`status: "ok"`): **US$0,004** por loja.
- Produto analisado com sucesso: **US$0,0015** por produto.
- Perfis de diagnóstico como `parse_failed`, `blocked` ou `platform_mismatch`: **não são cobrados** como perfis de loja.
- O evento sintético `apify-default-dataset-item` deve permanecer desativado para evitar cobrança duplicada.

#### Notas

- O Actor não oferece enriquecimento de contatos e exclui PII intencionalmente.
- Os resultados devem ser verificados de forma independente antes de decisões empresariais relevantes.

# Changelog

This Actor's version history is a separate document: https://apify.com/imagiever\_ar/tiendanube-nuvemshop-store-finder/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Use catalog to profile specific public store URLs. Discover is not implemented yet.

## `storeUrls` (type: `array`):

Public Tiendanube/Nuvemshop store URLs. The Actor never visits login, account, admin, or checkout paths.

## `countries` (type: `array`):

Reserved for discover mode.

## `keywords` (type: `array`):

Optional catalog filter applied to product name and category path.

## `maxStores` (type: `integer`):

Maximum number of supplied store URLs processed in this run.

## `maxProductsPerStore` (type: `integer`):

Maximum product records returned per store.

## `includeProducts` (type: `boolean`):

When false, the Actor still verifies one public product page when available so the store profile can be validated, but does not output product records.

## `onlyInStock` (type: `boolean`):

Return only products that are currently reported in stock.

## Actor input object example

```json
{
  "mode": "catalog",
  "storeUrls": [
    "https://santeriaarssacra.mitiendanube.com/",
    "https://eshopdigitalonline.lojavirtualnuvem.com.br/",
    "https://yerbaniz.mitiendanube.com/"
  ],
  "countries": [],
  "keywords": [],
  "maxStores": 3,
  "maxProductsPerStore": 5,
  "includeProducts": true,
  "onlyInStock": false
}
```

# Actor output Schema

## `results` (type: `string`):

Store profiles and product facts.

# 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 = {
    "mode": "catalog",
    "storeUrls": [
        "https://santeriaarssacra.mitiendanube.com/",
        "https://eshopdigitalonline.lojavirtualnuvem.com.br/",
        "https://yerbaniz.mitiendanube.com/"
    ],
    "countries": [],
    "keywords": [],
    "maxStores": 3,
    "maxProductsPerStore": 5,
    "includeProducts": true,
    "onlyInStock": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("imagiever_ar/tiendanube-nuvemshop-store-finder").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 = {
    "mode": "catalog",
    "storeUrls": [
        "https://santeriaarssacra.mitiendanube.com/",
        "https://eshopdigitalonline.lojavirtualnuvem.com.br/",
        "https://yerbaniz.mitiendanube.com/",
    ],
    "countries": [],
    "keywords": [],
    "maxStores": 3,
    "maxProductsPerStore": 5,
    "includeProducts": True,
    "onlyInStock": False,
}

# Run the Actor and wait for it to finish
run = client.actor("imagiever_ar/tiendanube-nuvemshop-store-finder").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 '{
  "mode": "catalog",
  "storeUrls": [
    "https://santeriaarssacra.mitiendanube.com/",
    "https://eshopdigitalonline.lojavirtualnuvem.com.br/",
    "https://yerbaniz.mitiendanube.com/"
  ],
  "countries": [],
  "keywords": [],
  "maxStores": 3,
  "maxProductsPerStore": 5,
  "includeProducts": true,
  "onlyInStock": false
}' |
apify call imagiever_ar/tiendanube-nuvemshop-store-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,imagiever_ar/tiendanube-nuvemshop-store-finder"
        }
    }
}
```

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/JMR4yWrhd5uca7STS/builds/UYJqQu1Z4RwKMrKYz/openapi.json
