De scrappers imposibles a APIs funcionales: la aventura de Manfred con LinkedIn😅
Toda historia tiene un comienzo
A principios de 2022 a David Bonilla se le ocurrió la idea de que los manfreditas pudiesen importar sus datos de LinkedIn en Manfred. Esto traería dos beneficios claros:
- Agilizar el onboarding: «¿Por qué tengo que introducir a mano mi carrera profesional si ya la tengo en LinkedIn? 🥱»
- Control total de tus datos: Los candidatos podrían exportar su perfil en formato JSON desde nuestra plataforma y llevárselo a donde quisieran, incluso sincronizarlo con Github.
El concepto parecía sencillo, pero no sabíamos la que se nos venía encima 😅.
La odisea del scrapper
LinkedIn no daba acceso a su API así como así y, mucho menos, para exportar tus datos en un formato legible por otras plataformas. Además, tenían unas estrictas políticas anti-scrapping: ofuscar HTML, bloquear cuentas sospechosas, y limitar el acceso a perfiles si no estabas logueado. Vamos, que no nos lo ponían nada fácil.
¿Qué hacían otras empresas? Soluciones de todo tipo:
- Pedirte que descargues tu perfil como PDF y extraer datos de ahí.
- Analizar los ficheros que te puedes descargar al exportar todos tus datos de LinkedIn.
- Y la más cómoda para el usuario: utilizar scrappers y bots para extraer los datos directamente desde la web. “Simplemente” tenías que proporcionarnos la URL de tu perfil y listo, nos encargábamos del resto.
Después de analizar todas las opciones, nos metimos de lleno en el mundo del scrapping y nos hicimos uno desde cero. Fue una odisea técnica: cambios constantes en el HTML, cuentas bloqueadas… pero al final conseguimos ofrecer una funcionalidad muy bien recibida por nuestros manfreditas. Eso sí, el coste de mantenimiento era altísimo, y cada cambio en LinkedIn nos hacía sudar tinta y plantearnos si merecía la pena 🤔.
Cuando David venció a Goliath
Pero a finales de 2022 todo cambió: la Unión Europea sacó la Ley de Mercados Digitales y obligó tiempo después a grandes empresas como LinkedIn a implementar una API de portabilidad de datos para usuarios de la UE. Ya lo anticipábamos aquí.
Cuando nos enteramos, fue un gran «¡EUREKA!»💡. Por fin podríamos olvidarnos del dichoso scrapper y utilizar una API como mandan los cánones.
Primero hicimos una prueba de concepto —POC— para validar que era viable y que exportaba los datos que queríamos. Una vez superado este paso, definimos la funcionalidad e implementamos la nueva funcionalidad —aka feature—.
Disclaimer: ⚠️ Eso sí, no todo es perfecto: esta API solo está disponible para cuentas creadas en la Unión Europea. Por suerte, la mayoría de nuestros candidatos están en España, así que el impacto fue mínimo. Más adelante, explicaremos cómo gestionamos este inconveniente.
Por qué es importante esta API para los candidatos
La API de LinkedIn tiene dos modalidades clave:
- Descargar un JSON con tus datos: Tienes una copia portable y estándar de tu información para usar donde quieras.
- Compartir tu JSON con empresas: Puedes autorizar a empresas, como Manfred, a importar directamente tus datos.
Esto significa que:
- Tus datos son tuyos —nuestro leit motiv😛—: Los gestionas y almacenas como prefieras.
- Onboardings más rápidos: Ahorras tiempo y esfuerzo en rellenar formularios.
En definitiva, más control y menos complicaciones.
Por qué es importante esta API para nosotros
La API de LinkedIn nos ha cambiado la vida por dos motivos principales:
Onboarding ágil para nuestros candidatos: Ahora podemos ofrecerles un proceso mucho más sencillo y rápido, importando directamente la información que decidan compartir con nosotros. Sin complicaciones, sin fricción.
Adiós al sufrimiento del scrapper: Pasar de un sistema inmantenible basado en scrappers a una API estándar ha reducido drásticamente el coste de mantenimiento. Aunque la API no es perfecta, es infinitamente mejor que depender de HTML cambiante y métodos poco fiables.
En resumen, esta API no solo mejora la experiencia de nuestros candidatos, sino que también hace nuestra infraestructura más sostenible.
Qué hemos hecho
La forma en que los manfreditas importan sus datos de LinkedIn desde el onboarding no ha cambiado mucho. Ahora hay un paso extra en el que LinkedIn te pide que confirmes que das permiso a Manfred para acceder a tu perfil.
- Si aceptas los permisos y tu cuenta de LinkedIn fue creada en la Unión Europea, la API de LinkedIn nos da luz verde para importar tus datos.
- Si no es el caso, ofrecemos una alternativa: usar el sistema «legacy» —el scrapper—.
Aquí tienes el proceso completo en video, porque ya sabes: una imagen video vale más que mil palabras. 👇
Importación de LinkedIn desde el Onboarding
Cómo lo hemos implementado
Vamos al hierro: ¿cómo hemos montado este tinglado? Aquí tienes un resumen del flujo de importación, dividido en tres fases principales
- Obtener autorización de LinkedIn y enviar el mensaje de importación
- Redirigimos al candidato a LinkedIn para que confirme que nos da acceso a sus datos.
- Si todo va bien, LinkedIn nos devuelve un token temporal para acceder a su API.
- Con ese token, enviamos un mensaje de importación del perfil a una cola SQS con un identificador de operación.
- El mensaje tiene un delay fijo de 1 minuto, que explicaremos más adelante.
- Extraer los datos del perfil con una Lambda de AWS
- Una Lambda de AWS procesa el mensaje de la cola SQS y se conecta a la API de LinkedIn para extraer los datos del perfil.
- 👉👉 Hemos liberado el código de la lambda y es opensource. Ahí tenéis también un diagrama técnico detallado de cómo funciona.
- El resultado es un JSON en formato MAC, con toda la información del candidato.
- ⚠️ Nota importante: A veces LinkedIn devuelve un perfil vacío al principio. Esto se debe a que su API necesita unos minutos para sincronizar los datos. Si esto ocurre, aplicamos una política de reintentos: reenviamos el mensaje a la cola con un delay de 1 minuto —hasta 5 intentos—.
- ⚠️ Nota importante: A veces LinkedIn devuelve un perfil vacío al principio. Esto se debe a que su API necesita unos minutos para sincronizar los datos. Si esto ocurre, aplicamos una política de reintentos: reenviamos el mensaje a la cola con un delay de 1 minuto —hasta 5 intentos—.
- Una Lambda de AWS procesa el mensaje de la cola SQS y se conecta a la API de LinkedIn para extraer los datos del perfil.
- Guardar los datos y enviar el email al candidato
- Nuestro sistema procesa el mensaje de resultado de la importación.
- Normalizamos las tecnologías: traducimos los nombres que extraemos de LinkedIn a los términos que usamos en nuestra base de datos, gracias a una lista de sinónimos y un enfoque “best effort”.
- Importamos los datos a nuestra base de datos, convirtiendo el formato MAC al esquema de Manfred mediante una transacción.
- Finalmente, enviamos un correo al candidato con un enlace para previsualizar su perfil y verificar los datos importados. 🎉
Conclusiones
Desde que en 2022 comenzamos con la odisea de importar datos de LinkedIn para nuestros manfreditas, hemos pasado por todo: scrappers imposibles, bots que se caían constantemente, y HTML que cambiaba cuando menos lo esperábamos. Pero al final, el esfuerzo ha valido la pena: ¡ya llevamos más de 27.000 importaciones realizadas! 🙌
Esto no habría sido posible sin el trabajo de todo el equipo involucrado: David Bonilla, Yeray Darias, Óscar Sánchez, Álvaro Cuesta, Juan Hurtado, Jose Manuel Álvarez y, Adrián Figueroa y modestamente, yo misma —Rebeca Méndez— 😄. Gracias a todos por vuestro talento y perseverancia.
A por la siguiente 💪.