Bulk-check whether email addresses have a HubSpot login.
Paste a list, get one structured row per email: registered,
HTTP status, and raw HubSpot response. No manual lookup needed.
Env HUBSPOT_RESIDENTIAL_PROXY=1 — optional residential Apify proxy (fallback to default proxy if unavailable).
Changed
403 / Cloudflare: dataset error is now a short explanation (no multi-KB HTML).
JSON without status: read nested data / result / etc.; conservative heuristic for “likely existing user” (portalId, email, SSO/password hints) so real 200 responses map to registered: true when appropriate.
HTTP layer:responseType: 'text' + JSON.parse to handle HTML vs JSON cleanly.
Warning on Apify when proxy URL is missing.
Smoke test aligned with production parsing.
[1.0.2] - 2026-03-28
Added
AGENTS.md — short notes for agents/maintainers (apify run, input paths, PII).
.actor/actor.jsonmeta.generatedBy per Apify Actor guidelines.
Changed
Retries with exponential backoff on 429 / 408 / 5xx and on thrown network errors (bounded attempts).
Input guard: max 10,000 emails per run; loose email validation skips bad lines without calling HubSpot (log.softFail, no address in log text).
End-of-run log.info: numeric summary only (yes / no / unclear / invalid counts).
README: Apify-recommended local workflow, storage/INPUT paths, logging & privacy note.
[1.0.1] - 2026-03-28
Changed
User-facing copy (Store description, seoDescription, input schema, README, dataset/output schema blurbs): benefit-led wording for buyers; no “API / endpoint” framing in marketplace text.
[1.0.0] - 2026-03-28
Added
Initial release: bulk emails input, POST to HubSpot login-requirements/login, dataset row per email with registered (true / false / null), hubspotStatus, hubspotMessage, correlationId, httpStatus, error, checkedAt.
HTTP 400 responses with JSON body treated like 200 (HubSpot returns 400 + INVALID_USER for unknown users).
Apify proxy via Actor.createProxyConfiguration() when available (helps with Cloudflare).
Minimal RUN_LOG (checked / total).
Smoke test: INVALID_USER for a synthetic address; SMOKE SKIP on Cloudflare 403 challenge when no proxy.