MiniCRM XML SyncFeed POC

Build XML from Airtable or Google Sheets and send bulk upsert payloads to MiniCRM SyncFeed.

v0.21.107
2026-09-24 21:25

Actions

Comma-separated referenceField values (Airtable ID). Preview/Send fetch ONLY these rows from Airtable (filterByFormula, ~1s) instead of walking the whole table — recreate specific cards fast.
Validate or Preview to enable sync
Loading table config...
Select: all / none Limit (empty = all)
Select a master spreadsheet and click Load courses.
Drop .xlsx or .csv file here or click to browse
Import ActiveCampaign notes onto each contact's Contacts (cat 84) card as MiniCRM ToDos. Matched to MiniCRM contacts by email; the note text is imported verbatim (no ToDo type), with the original author + date kept as plaintext.
Loading status...
Single contact (optional test — imports only this contact)
Limit (empty = all; ignored when a single contact is set)
Bulk import (SyncFeed) — fast, for the full / recurring import
Batched upload (~minutes for everything). Only notes newer than the stored high-water mark are sent, so re-runs never duplicate. Optional From–To range over the eligible notes (sorted by note id) to stage it. No warm needed.
From – To

Tags import — AC ∪ Airtable → Contacts (cat-84)

Upload the ActiveCampaign Contacts CSV export (needs the Email and Tags columns). Preview first; each run overwrites every card's tags with the freshest union (replace mode).

Airtable ID-k vesszővel. Egy kártyás próbához: töröld a kártya tagjeit MiniCRM-ben, küldd el csak az ő refjével, és nézd meg, visszajönnek-e.

            

Futások

A rate limit miatt egy futás órákig tarthat. A kimenet mostantól tárolva van, tehát nem vesz el, ha kozben bezárod a fület.

Persistent store

Nothing here empties itself. A redeploy used to wipe every table; this tab is where clearing becomes a decision instead of a side effect.

Look up an identity

Any id finds the rest: MiniCRM id, SyncFeed reference, Airtable ref or record id, AC id, portal id, email.

Clear a store

Scope is mandatory and there is no "all". The reference map and the AC-note ledger are deliberately absent: one hands out identity, the other is what the ToDo undo reads.

Contact-level load & sync

Runs the whole chain for one person — company → Contacts card → company link → tags → notes — in the only order that works, and reports what it did per contact. Dry run is on by default: this writes to five different places, so a forgotten checkbox should be the harmless direction.

It refuses to link a contact that has no Contacts card yet. That refusal is the point: a deal created before its person exists gets the company as its contact, and ContactId can never be changed afterwards. Needs the cat-84 link map — run Warm Contacts-links first after any deploy.
Resync one contact
Paste what you have in front of you: the address-book contact id, or the Contacts card id from the URL (#Project-84/43258 → 43258).
Batch by Airtable ref
Airtable Representative ID values. Keep it to tens — the inline tag cleanup costs roughly a minute and a half per linked contact.

            

Companies import — Airtable Companies → MiniCRM Cég

Matches existing Cég records by VatNumber (no name-guessing) and creates the rest. Never touches Tags. The Representative→Company link backfill is a separate step further down (Phase 3).

Decided 2026-08-12: MiniCRM's own Cégadatbázis lookup auto-enriches a Cég with VatNumber/RegistrationNumber after creation regardless of how it was created, and a cleanup pass is already planned separately — so duplicate risk on the ~3,700 no-VatNumber rows is accepted rather than blocked on a per-row review. Off by default; check this box to opt in for a run. Applies to Preview/Send, the Full run job, and Phase 3 below (they all share this setting).
Resolve / create (metered against the shared MiniCRM rate limit)

            
Full run (async job, no 50-row cap)
For the whole VatNumber-matched set (~955 rows) or more — runs as a background job over the shared rate limit, same pattern as Notes/Tags bulk import. Don't run this during a live demo, it will visibly slow anyone else's Preview/Send.

              
Phase 3: link Representatives to their Company (BusinessId)
Sets BusinessId on each Representative's carded contact. MiniCRM moves the Person's tags to the Cég when this happens (confirmed bug, even when the Cég already has its own tags) — this job captures the tags first and restores them to the Person afterward, but the Cég keeps its own transferred copy too (accepted tradeoff, cleaned up later via a separate manual/scripted pass, not by this importer). Re-resolves/creates the full Companies table every run (~15-20 min) before touching any Representative. Requires "Warm Contacts-links" to have been run recently. Full run is ~10-20h — never during a live demo.

Newsletter import — AC K-Newsletter list → Contacts card field

Upload the ActiveCampaign list export (needs an Email column) and write Newsletter subscription - KÜRT on each cat-84 Contacts card, in bulk over SyncFeed. Preview first — it writes nothing.

Export from the list, never from the tag (?listid=41&status=1 subscribed, 2 unsubscribed, 3 bounced): unsubscribing removes the contact from the list but leaves the tag behind. Run Subscribed first and the Not Subscribed lists last — last write wins. The CSV must be comma-separated; a semicolon export (Hungarian Excel) parses as zero rows.

Writes the card, not the address-book person — a card is one email address, so per-address consent is representable there and is not on the person. Cards are matched through Airtable Representatives ID; an address with no card is reported as unaddressable and never created. ≈329 of 5 876 is the healthy number for this list (measured 2026-08-26), not a fault.


            

Kimenet

Categories

Loading...

Contact Search

Select a category to view its schema, or search for a contact.
Advanced: API Tester
Allowed: /Schema/*, /Category, /Project/*, /Contact/*, /AddressBook/*

Orphan Cleanup — tenant-wide shadow-duplicate dedup

MiniCRM has a systemic duplicate-Person problem (every category that's ever created a new cat-82/83/84/97 card has been minting one duplicate Person contact per person, tenant-wide). This finds email groups with exactly one carded (visible) member — that's "the real one" — and permanently deletes (PurgePerson, not soft-delete) every uncarded sibling, after migrating any differing Phone / Email / NewsletterSubscription2 value onto the keeper first. Groups with zero or >1 carded members are left alone entirely (no evidence either way). Approved by Vera 2026-08-12.

⚠️ This is irreversible. Always Preview first, then a small limit (10-20) for a manual spot-check in the MiniCRM UI, before an unlimited real run. Don't run during a live demo or while anyone else is deploying — warming 4 categories takes ~20-25 min alone.