What you need
- A meeting recorder with call history. Gong today. Meetings are the signal — without them there is nothing to reconcile.
- Salesforce. The stakeholder list is built from Salesforce contacts. Without it you still get the meeting reconciliation and the company coverage, but the ICP verdict reads “not assessed — no CRM configured” and the stakeholder tab says that rather than listing people.
- PostgreSQL 13 or later, in your environment. It holds the meeting-identity graph.
- A way to get the code there. Your GitLab and runners, a GitHub Actions pipeline, a container image in your cloud — transport is yours and stays out of the codebase.
- Optionally, HubSpot, for marketing-contact context.
What is supported today
| Area | Supported | Notes |
|---|---|---|
| Meeting source | Gong | Swappable — one importer fills two tables |
| CRM | Salesforce, any org | Field names are resolved per org, never hardcoded |
| Marketing contacts | HubSpot | Optional. Absent means no column at all — never a “no”, never a 0 |
| ICP: company size | Employee band | |
| ICP: geography | Region or country | North America, EMEA, APAC — no state or city level |
| ICP: account type | Optional substring gate | Off by default |
| Seniority | Title matching | C-level, VP, director, founder, manager |
| Database | PostgreSQL 13+ | gen_random_uuid() is built in from 13 |
| Delivery | Local files | A workbook, a JSON dump and an HTML page |
| Scheduling | None | The repo defines no packaging or scheduling |
| Enrichment providers | None wired up | The pipeline spends nothing |
Checked against the code on 25 August 2026. The authoritative version is docs/supported-configuration.md.
No Salesforce managed package required
The pipeline holds no Salesforce custom field name. At setup it describes the Account and Contact objects, matches every field name and label against include and exclude patterns, counts how many records populate each survivor, and stores the candidates in population order. Every query is then built from that map. If nothing resolves for a field, its column reads “not available in this CRM” and the run continues — a field that does not exist would otherwise kill the whole query rather than return an empty column.
What swaps cheaply, and what does not
The meeting source swaps. Everything downstream reads the product database, not Gong. Supporting Fathom, Fireflies, Chorus or anything else means writing one importer that fills two tables.
The CRM does not. Salesforce is read mid-pipeline across three modules. The field map makes it portable across Salesforce orgs; it does not make another CRM work. A team whose primary CRM is HubSpot needs an interface that has not been written.
The boundary
Yours is configuration, secret references and your deployment pipeline. Upstream is all code — read from the public repository and never edited. Your version control holding a copy is fine; your version control being where changes originate is a fork, and a fork can take no update.
Contributions are not accepted and pull requests are turned off. Issues are on: if you are running Quorom and something needs to change, say so rather than patching locally.
Licence
You may run Quorom to produce stakeholder maps for your own organisation, including deploying it in infrastructure you control. You may not sell it on to other people as a hosted or managed service. That restriction is time-limited: four years after a version is first published, it converts to Apache 2.0. The licence is the Business Source License 1.1, which is not an Open Source licence, and the LICENSE file is the terms — this paragraph is not.