Scrape used equipment listings from MachineryZone.eu, a major European marketplace for construction, agriculture, and material handling machinery. Extract price, make, model, year, hours, dealer info, and specs. Compare prices across the European equipment market.
Changelog — MachineryZone Scraper — European Heavy Equipment
2026-10-04 — convención tiempo_uso
tiempo_uso sin cambios de formato ('N h'). Nueva ext_tiempo_uso_unidad ('h'; null si tiempo_uso null) y ext_tiempo_uso_calidad ('cero' si 0 h; null si no) en live (ftp28 y english), ficha beta y preloaded (derivado de lo almacenado, idempotente, antes de _to_out). dataset_schema.json declara las 2 ext.
0.4 — 2026-10-03 (checkpoint por mes/categoría)
Checkpoint incremental en el store machineryzone-checkpoints, clave CHECKPOINT_{YYYY-MM}_{slug} (el mes sale del nombre del snapshot). Se escribe tras cada push de página, nunca por delante del dato.
Tras un corte, el run reanuda en last_page+1; la categoría se marca done solo con fin natural verificable: racha de 6 páginas sin nuevos (así terminan las categorías de MZ: sept, 0 respuestas 404) o 404. Una página vacía (posible bloqueo no detectado) termina la categoría en el run pero no la marca done. maxItems, IPs quemadas, sin progreso o maxPages agotado NO la marcan.
La racha de 0 nuevos solo cuenta por encima de la página de reanudación y después de ver al menos una página con nuevos en la categoría: un prefijo ya presente en el dataset (sin checkpoint, KV atrasado o forceRestart) no cierra la categoría. Si hubo checkpoint y aún no hay nuevos (corte durante la racha final), la racha cuenta con límite 12. La racha se comparte entre sesiones de la categoría.
forceRestart usa el last_page previo como suelo de la racha (arranca igualmente en p1).
Slugs repetidos en categories se deduplican.
warmup sin cambios: siempre aterriza en p1 y la navegación sigue a la página de reanudación.
maxItems a mitad de página registra página-1 en el checkpoint; la página se revisita al reanudar (dedup por IDs).
Runs con _snapshot_dataset_name usan el prefijo {snap}__ en la clave: una prueba no toca las claves de producción. Si el nombre es el de producción (machineryzone-YYYY-MM), sin prefijo.
Solo runs admin: los runs de usuario no usan checkpoint ni escriben CHECKPOINT_* en su KV (igual que antes).
Si el checkpoint no se puede abrir o leer, el run sigue sin él y el resumen final dice [ckpt] RESUMEN sin checkpoint (no disponible).
forceRestart resetea el checkpoint de las categorías del run. Al final se registra [ckpt] RESUMEN x/y categorias INCOMPLETAS y ckpt_incompletas en SUMMARY.
Coste peor caso: un run admin sin checkpoint sobre un dataset del mes ya completo recorre maxSessions×pagesPerSession por categoría una vez (el prefijo visto no cuenta para la racha). Supuesto: el checkpoint no va >11 páginas por detrás del dataset.
forceRestart no está declarado en el input schema (sin cambios de schema en este ciclo).
Dockerfile: navegador Camoufox fijado a 152.0.4-beta.30 (el de 0.4.16). Sin el pin, cualquier rebuild baja 156.0.1-beta.33, incompatible con camoufox 0.4.11 (Unknown property navigator.appCodeName, run idpolxOciomB1YNlW: 0 items).
Medición: prueba de corte pendiente.
0.3 — 2026-08-25 (tag latest)
Añadido
ext_vendedor_id — número de cuenta del vendedor, extraído de la URL de la imagen
(cloudfront.net/…/{CUENTA}/{ANUNCIO}/…). Medido sobre los snapshots completos: 95,0% en
agosto y 94,0% en julio, 506 cuentas, y una sola cuenta con dos nombres —la misma empresa
cambiando de forma societaria—. ref_anunciante conserva la razón social.
No cuesta ninguna petición: la URL ya viajaba en el registro.
_snapshot_dataset_name — dirige un run de admin a un dataset desechable y no publica el
puntero.
_admin_snapshot y _snapshot_dataset_name declarados en el input schema. Sin declarar,
Apify los descartaba de la entrada y el run caía a preloaded en silencio.
Nota de operación
DECODO_PROXY en este actor va sin el prefijo user-: el constructor lo antepone siempre,
a diferencia de Truck1 y mobile-de. Con el prefijo puesto el proxy rechaza la conexión y el run
termina en SUCCEEDED con cero items.
Formato: que cambio, por que, y la medicion que lo respalda. Un cambio sin numero detras es
una opinion; en este repo no cuenta como entrada de changelog.
Las versiones son las de Apify (mayor.menor). La plataforma no admite numero de parche.
[0.2] — estado a 21 de agosto de 2026
Version activa en Apify, con tag latest. Exportada a este repo el 21 de agosto de 2026.
No se reconstruye aqui el historial anterior: inventarlo seria peor que no tenerlo. Lo que hay documentado de ciclos previos vive en el runbook de la fuente, en rastriq-docs/interno/runbooks/. A partir de esta entrada, todo cambio se anota aqui con su medicion.