> ## Documentation Index
> Fetch the complete documentation index at: https://docs.myfundingmachine.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Subscriber opportunity sync

> Preview and reconcile one subscriber opportunity per source business, with separate account rosters and visible exceptions.

The subscriber sync mirrors Funding Machine subscriptions into the **My Funding
Machine** CRM account. Each subscribing business has one opportunity named after
the business and linked to its confirmed main owner's contact. Several businesses
can share an owner and still have separate opportunities.

The source location ID identifies the business. Renaming it, pausing service,
canceling, or reactivating does not create a replacement opportunity.

## Enrollment and subscription stages

Only **Active** accounts enter the pipeline for the first time. Newly trialing,
past-due, paused, and canceled accounts wait until they become active. Once an
opportunity is managed, its subscription stage follows **Active**, **Trialing**,
**Past Due**, **Paused**, or **Canceled**. Unpaid subscriptions use Past Due.
Unrecognized states require review.

These stages are separate from the opportunity's open, won, lost, or abandoned
status. Existing opportunity status stays unchanged, including on reactivation.
New opportunities start open. Nothing is deleted on cancellation.

## Owners, billing contacts, and account users

Staff must confirm the main owner's source user ID before an opportunity is
created. An admin role, billing contact, or position in the user list does not
establish ownership. The confirmed user must remain assigned to that source
account and have an email address.

The sync searches for an exact email match in the destination. Multiple matches
require review; no match creates a destination contact. Existing contact names,
phone numbers, assignments, notes, and other fields stay unchanged. Source
contact IDs are never reused as destination contact IDs.

Billing contact information is recorded separately from the main owner. The
account's assigned users are stored in a separate staff-only roster linked by
source location ID. Agency staff and deleted users are excluded. The opportunity
stores the user count, rather than repeated fields for individual users.

Changing the main owner preserves the opportunity and raises a primary-contact
relink exception. The current CRM API does not expose that change through the
opportunity update operation. Staff must relink the existing opportunity in the
CRM; the next run verifies the new contact instead of replacing the opportunity.

## Fields maintained by the sync

The sync owns the business name, subscription stage, and its eight dedicated
custom fields: source location ID, plan, amount, billing frequency, next billing
date, user count, last sync time, and billing contact. Amount is the catalog
recurring plan price in dollars, before discounts, taxes, or one-time charges.
Annual prices remain annual amounts.

Next billing information comes from the matching payment subscription. A
subscription scheduled to cancel instead of renew shows **No renewal scheduled**.
Unavailable billing information remains an exception; it never becomes an
invented zero or date. Known fields and stage can still update when optional
billing information is unavailable. The last full sync time advances only when
all required reads and the destination readback succeed.

Manual notes, assignments, followers, lifecycle status, monetary value, and
unrelated custom fields are not included in update requests. Existing CRM
workflows are not edited. CRM workflows that already react to contact or
opportunity changes may still run; review their triggers before activation.

## Preview and exceptions

The automation ships disabled. A staff maintainer first runs the read-only
preview, which shows source accounts, missing sources, required configuration,
proposed fields, rosters, and owner/contact exceptions. Preview does not refresh
tokens, save records, or enqueue writes. Expired credentials block it explicitly.

After activation, the sync checks every six hours. Account work is serialized,
with durable progress and a readback after each opportunity write. Staff can
inspect the run counts and each account's latest exception through the internal
maintenance commands in the repository runbook.

A missing source account is held for review, even after a complete directory
read. Missing does not mean canceled. Failed or incomplete searches never count
as evidence that a contact or opportunity does not exist.

If a create request times out, a later run first tries to reconcile the existing
record. It does not blindly send the create again. An unresolved attempt stays
visible for staff review. Disabling the sync stops new workers; the current
worker may finish. Re-enabling resumes reconciliation without deleting records.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.