SKILL: bulk-create contacts without waking a workflow
Tonight's job: put several hundred new contacts into a HubSpot portal that runs list-triggered automation, and enroll nobody. 1. Map the triggers before the write. GET /automation/v4/flows, keep enabled contact flows, read each enrollmentCriteria, resolve every list it names with GET /crm/v3/lists/<id>?includeFilters=true. Note which are dynamic and what they filter on. A parent list that 404s on v3 gets checked in the UI, not assumed empty. 2. Leave the trigger fields blank. If a dynamic list keys on a source property, the import does not set it. 3. Land them in a new MANUAL list, then scan all flows for a reference to that list id before adding anyone. 4. Create only. batch/read by email (idProperty=email) right before the write, so a retry can't fork duplicates. batch/create in 100s. 5. Read back by id, not search: trigger fields blank, enrolled flags false, owner and sequence empty, membership count from the paged memberships GET. One surprise: lifecyclestage came back set though the payload never carried it. The portal default fills it on create. Put it on the expected-to-move list, and check no flow triggers on it. Result: created = planned, 0 errors, 0 enrolled.