Imagen del scraper Website ContactsCorreos, teléfonos y redes sociales

Website Contacts Scraper.

Empieza con sitios de empresas. Recopila sus contactos publicados y agrupa perfiles por red, para que tu equipo tenga más que un dominio.

Ejecutar en Apify

Cómo puedes usar este scraper.

Prueba estos ejemplos para marketing, crecimiento y análisis de la competencia.

01

Añade contactos a una lista de posibles socios

Si ya has estudiado posibles distribuidores, recopila sus canales públicos. Revisa cuál encaja con tu propuesta de colaboración.

Conserva una tabla por dominio con contactos publicados y enlaces sociales.

02

Completa la investigación de empresas de una agencia

Empieza con dominios de una categoría obtenidos en Google Search. Revisa sitios y perfiles y estudia audiencia y posicionamiento de cada empresa.

Añade páginas originales y notas a la lista de empresas.

03

Revisa los contactos de tus propios sitios

Para varias marcas, comprueba correos, teléfonos y redes de cada sitio. Contacta a sus responsables por datos ausentes o enlaces obsoletos.

Conserva una auditoría con enlaces a las páginas revisadas.

DE LA PRIMERA EJECUCIÓN A UN FLUJO RECURRENTE

Tu primera ejecución, paso a paso.

  1. Abre el Actor en Apify, entra en Input y cambia al editor JSON para pegar una configuración.
  2. Pega dos URLs verificadas en startUrls. Sustituye los ejemplos por empresas de tu lista. Evita URLs de perfiles sociales si ya conoces el sitio principal de la empresa.
  3. Empieza con ocho páginas por sitio y maxResults 2. Mantén skipSitesWithoutContacts en false para ver también sitios sin contactos. No hace falta proxy por defecto; añádelo si la fuente lo requiere.
  4. Inicia la ejecución y revisa el registro. Comprueba qué objetivos y filtros se interpretaron antes de concluir que no hay datos.
  5. Abre Storage → Dataset, revisa varios registros y exporta JSON para datos anidados o CSV para una primera revisión en una hoja.
Configuración inicial
{
  "startUrls": ["https://apify.com", "https://www.iana.org"],
  "maxPagesPerSite": 8,
  "maxResults": 2,
  "skipSitesWithoutContacts": false
}

Pégalo en el editor JSON del Actor. Cambia los ejemplos por tus propios objetivos antes de ejecutar.

Consulta el formulario actual en Apify

Elige cómo buscar.

El scraper visita un sitio y prioriza páginas que puedan contener contactos públicos. Dale URLs verificadas siempre que puedas. Los atajos por nombre de empresa pueden adivinar un dominio y requieren comprobar la identidad.

Método de búsquedaCuándo usarloQué cambia
Dominios webCuándo usarloSabes exactamente qué entidad quieres recopilar.Qué cambiaURLs o dominios, como textos u objetos con url. Cada web se analiza por separado. Nombres y perfiles pueden convertirse en dominios supuestos; usa webs verificadas para evitar confusiones.
Accesos por nombre de empresaCuándo usarloQuieres encontrar resultados relevantes antes de elegir objetivos concretos.Qué cambiaUna web junto a startUrls o en su lugar. Un correo empresarial puede interpretarse como su dominio, pero una web verificada es más clara.
Profundidad de rastreoCuándo usarloQuieres más cobertura y puedes permitir una ejecución más grande.Qué cambiaDe 1 a 100 páginas por web, por defecto 8. Prioriza contacto, aviso legal, empresa, equipo y soporte. Auméntalo para webs grandes, no para más dominios.

La diferencia importante

Limita registros de webs entregados, no emails ni páginas. Cada dominio suele generar una fila con listas de contactos. Vacío procesa toda la lista.

Compara el scraper relacionado

Todos los parámetros, explicados.

Usa estos nombres exactos en JSON. En el formulario de Apify, introduce cada elemento de las listas por separado y mantén números y booleanos en su tipo correcto.

Default y prefill son distintos. El valor por defecto se aplica si omites un ajuste; el prellenado es un ejemplo introducido en el formulario de Apify. Revisa objetivos y límites antes de cada ejecución. Algunos ajustes no tienen valor por defecto en el esquema. Debes indicar al menos un objetivo admitido.

Objetivos y búsquedas2
startUrls
ListaEjemplo precargado: ["https://apify.com","https://www.iana.org"]

URLs o dominios, como textos u objetos con url. Cada web se analiza por separado. Nombres y perfiles pueden convertirse en dominios supuestos; usa webs verificadas para evitar confusiones.

url
Texto

Una web junto a startUrls o en su lugar. Un correo empresarial puede interpretarse como su dominio, pero una web verificada es más clara.

Límites, detalles y proxies7
maxPagesPerSite
EnteroPor defecto: 8

De 1 a 100 páginas por web, por defecto 8. Prioriza contacto, aviso legal, empresa, equipo y soporte. Auméntalo para webs grandes, no para más dominios.

maxResults
Entero

Limita registros de webs entregados, no emails ni páginas. Cada dominio suele generar una fila con listas de contactos. Vacío procesa toda la lista.

skipSitesWithoutContacts
Verdadero o falsoPor defecto: false

true omite webs leídas sin contactos; false conserva filas vacías para revisar cobertura. Webs inaccesibles o bloqueadas son fallos distintos, no pruebas de falta de contactos.

maxConcurrency
EnteroPor defecto: 5

De 1 a 20 webs a la vez, por defecto 5. Paraleliza dominios distintos, no páginas del mismo sitio. Mantén la pausa por web al aumentar cantidad.

delayMs
EnteroPor defecto: 300

Pausa entre solicitudes al mismo sitio en milisegundos. No detiene webs distintas en paralelo. El valor inicial 300 es una buena base.

requestTimeoutSecs
EnteroPor defecto: 20

Espera de 5 a 120 segundos por página, por defecto 20. Aumenta para sitios lentos o reduce para listas rápidas. No limita toda la ejecución.

proxyConfiguration
ObjetoPor defecto: {"useApifyProxy":false}

Opcional para webs empresariales públicas; por defecto no usa proxy. Prueba uno para listas grandes o páginas rechazadas y revisa fallos en lugar de considerarlas vacías.

Ajustes avanzados y recuperación3
resume
Verdadero o falsoPor defecto: true

Guarda el progreso aproximadamente cada 30 segundos para continuar tras un reinicio o migración. Déjalo activado.

continueFromLastRun
Verdadero o falsoPor defecto: false

Continúa el trabajo pendiente de la ejecución anterior con la misma entrada. Los resultados anteriores quedan en su dataset. Usa false para una colección nueva o periódica.

impersonate
TextoPor defecto: chrome131

Identidad de navegador utilizada en las solicitudes. Conserva el valor predeterminado salvo que investigues bloqueos inmediatos. Cambia la huella de la solicitud, no los datos solicitados.

Esta referencia sigue los campos del Actor. Revisa el formulario actual antes de cambiar un flujo de producción. Consulta el formulario actual en Apify.

Configuraciones listas para copiar.

Cada ejemplo es una ejecución independiente. Empieza con poco, revisa los resultados y amplía después. Adapta objetivos, países y fechas a tu pregunta.

Revisa una lista de empresas verificadas

Recopila contactos públicos de cuatro dominios conocidos, hasta ocho páginas por sitio. Conserva filas vacías para revisar cobertura. Cambia los ejemplos por tu lista de investigación antes de ejecutar.

Revisa una lista de empresas verificadas
{
  "startUrls": [
    "https://apify.com",
    "https://www.iana.org",
    "https://www.python.org",
    "https://www.getdbt.com"
  ],
  "maxPagesPerSite": 8,
  "maxResults": 4,
  "skipSitesWithoutContacts": false
}

Explora más a fondo unos sitios

Aumenta a 20 páginas en dos dominios si los contactos están repartidos. El Actor prioriza páginas de contacto probables; el presupuesto mayor sigue siendo un rastreo limitado, no todas las URLs del sitio.

Explora más a fondo unos sitios
{
  "startUrls": ["https://apify.com", "https://www.getdbt.com"],
  "maxPagesPerSite": 20,
  "maxResults": 2,
  "skipSitesWithoutContacts": false,
  "maxConcurrency": 2,
  "delayMs": 500
}

Exporta solo sitios con contactos

Pon skipSitesWithoutContacts en true para una lista con contactos. Revisa primero una ejecución con false: filtrar filas vacías facilita exportar, pero oculta parte de la cobertura.

Exporta solo sitios con contactos
{
  "startUrls": [
    "https://apify.com",
    "https://www.iana.org",
    "https://www.python.org",
    "https://www.getdbt.com"
  ],
  "maxPagesPerSite": 8,
  "maxResults": 4,
  "skipSitesWithoutContacts": true
}

Ejecuta, revisa, exporta y repite.

Espera un registro por sitio con listas de emails públicos, teléfonos y perfiles sociales. Listas vacías pueden significar ausencia de contactos, bloqueo o contenido solo JavaScript que este scraper HTTP no renderiza. Revisa registros y páginas antes de declarar una empresa inaccesible. Verifica dominios adivinados antes de unir datos.

  1. Revisa el dataset y el registro SUMMARY. Compara el total con tu límite, revisa entradas fallidas u omitidas y verifica algunos enlaces originales.
  2. Conserva los IDs originales y añade collected_at y run_id al guardar. Usa CSV para columnas planas y JSON para arrays o detalles anidados.
  3. Guarda la configuración probada como Apify Task y prográmala. Para capturas periódicas, deja continueFromLastRun en false. Elimina duplicados por ID conservando la fecha de cada observación.
  4. En Make o n8n, espera una ejecución correcta, obtiene el dataset y mapea campos a Sheets o tu almacén. Alimenta Looker Studio mediante una tabla de informes y usa dbt para transformar y validar modelos.
  5. El mismo JSON sirve con la API de Actors de Apify. En Claude con Apify MCP, indica este Actor, pide que revise el esquema y define objetivos, mercados y límites antes de ejecutar.

Reanudar no es obtener una captura nueva

resume protege la ejecución actual si Apify la reinicia. continueFromLastRun continúa una anterior con la misma configuración; sus registros siguen en el dataset anterior. Une ambos datasets y aumenta un límite ya alcanzado. Empieza de nuevo si quieres ver qué ha cambiado hoy.

Sigue las guías para Sheets, Claude, Looker y BigQuery
Ejecuta este Actor con la API

Guarda una configuración anterior como input.json. Define APIFY_TOKEN con tu token de Apify en la terminal y envía el archivo como cuerpo de la solicitud.

Inicia la ejecución
curl --fail-with-body --request POST \
  --url "https://api.apify.com/v2/actors/jmlp~web-contact-scraper/runs" \
  --header "Authorization: Bearer $APIFY_TOKEN" \
  --header "Content-Type: application/json" \
  --data-binary @input.json

La respuesta contiene un ID de ejecución y defaultDatasetId, no resultados finales. Espera a que termine con éxito, define DATASET_ID con ese ID y recupera los elementos. Para datasets grandes, usa limit y offset para paginar.

Recupera el dataset
curl --fail-with-body \
  --url "https://api.apify.com/v2/datasets/$DATASET_ID/items?format=json" \
  --header "Authorization: Bearer $APIFY_TOKEN"

Referencia de la API de ejecución y exportación de Apify
Opciones de exportación del dataset

Cuando los resultados no cuadran.

Cambia un ajuste cada vez, mantén un límite bajo y revisa el resumen antes de ampliar.

Un nombre de empresa llevó a un sitio incorrecto.

URLs o dominios, como textos u objetos con url. Cada web se analiza por separado. Nombres y perfiles pueden convertirse en dominios supuestos; usa webs verificadas para evitar confusiones.

Un sitio tiene datos de contacto, pero el resultado está vacío.

Espera un registro por sitio con listas de emails públicos, teléfonos y perfiles sociales. Listas vacías pueden significar ausencia de contactos, bloqueo o contenido solo JavaScript que este scraper HTTP no renderiza. Revisa registros y páginas antes de declarar una empresa inaccesible. Verifica dominios adivinados antes de unir datos.

Algunos sitios de entrada no aparecen en el dataset.

true omite webs leídas sin contactos; false conserva filas vacías para revisar cobertura. Webs inaccesibles o bloqueadas son fallos distintos, no pruebas de falta de contactos.

La ejecución terminó sin resultados

El éxito indica que el Actor terminó, no que la fuente devolviera datos. Revisa SUMMARY.inputProblem, SUMMARY.problem y el registro: pueden faltar objetivos, haber filtros inválidos o solicitudes rechazadas. Prueba un objetivo conocido con menos filtros.

Menos registros de lo esperado

Revisa límites globales, por búsqueda y por página, cobertura y duplicados. Varias búsquedas pueden encontrar el mismo registro. El total de la fuente puede incluir datos no disponibles públicamente. Revisa los trabajos pendientes antes de dar el dataset por completo.

Usa los resultados en tus herramientas.

Google Sheets

Une por dominio normalizado. Coloca arrays de contactos en columnas específicas y anota canal preferido, relevancia y fuentes.

Leer la guía
Claude + MCP

Pide a Claude que organice canales por red y marque registros ambiguos o ausentes. Un buzón general no identifica a una persona y un correo publicado no verifica entrega.

Leer la guía
Looker Studio

Muestra dominios con correo, teléfono o LinkedIn. Conserva errores en el informe para distinguir datos ausentes de canales inexistentes.

Leer la guía
BigQuery + dbt

Guarda un registro por dominio y ejecución con hora. Usa UNNEST para separar correos, teléfonos y perfiles en tablas para uniones y conserva las fuentes.

Leer la guía
Copiar un prompt para Claude
Prompt para Claude + Apify MCP
Comprueba jmlp/web-contact-scraper y ejecútalo para https://apify.com con máximo ocho páginas por sitio. Organiza correos, teléfonos y perfiles públicos, cita páginas y marca errores o canales ausentes. No afirmes que la entrega de correo está verificada.

Los campos que obtendrás.

Conserva la hora de recopilación y los ID originales. Los necesitarás para comprobar el origen de un resultado o compararlo con otra ejecución.

Antes de sacar conclusiones

Recopila contactos publicados, no datos privados ni verificación de correo. Algunos sitios no devuelven contactos. Revisa errores y fuentes antes de elegir un canal para una comunicación pertinente.

domain / url
Clave para eliminar duplicados y dirección final del sitio.
emails / phones
Correos y teléfonos publicados.
socials / socials_by_network
Perfiles públicos agrupados por red.
has_contact
Indica si se encontró algún canal público de contacto.
pages / pages_crawled
Cobertura de recopilación y páginas visitadas.
errors
Problemas de recopilación que debes revisar.

Preguntas frecuentes.

¿Verifica que los correos se puedan entregar?

No. Extrae direcciones publicadas en sitios web. Verificar la entrega es otro proceso.

¿Puedo conectarlo a resultados de Google Search?

Sí. Valida sitios, normaliza dominios y usa la lista revisada como entrada. Comprueba URL reconstruidas antes de enviarlas a otro crawler.

Fuente y detalles actuales del producto: Actor Website Contacts de JMLP en Apify.

Otros scrapers
que podrían servirte.

Hablemos de
tu proyecto.

Cuéntame qué necesitas recopilar o entender. Puedo ayudarte con un scraper a medida, un pipeline o el análisis.

Hablemos de tu proyecto