Where dues and roster data comes from
The **Dues & Renewal** page shows a dues-current percentage, a count of lapsed members, and rows of members renewing soon or already past due. None of that is calculated by Verinode. Every number o…
On this page
- What this article covers
- Where to find the pages this feeds
- The two things behind every number
- How the roster gets here: import by an admin
- How dues events feed status and renewal dates
- Recomputed live, not on a batch delay
- What every number is actually built from
- The privacy boundary
- Empty states, verbatim
- Related help
What this article covers
The Dues & Renewal page shows a dues-current percentage, a count of lapsed members, and rows of members renewing soon or already past due. None of that is calculated by Verinode. Every number on the page traces back to two things your association itself maintains: your official membership roster, and the log of dues activity (payments, renewals, lapses, and waivers) that sits behind it. This article explains what those two things are, how the roster gets into Verinode in the first place, and how the two of them together produce what you see.
If you want the page-by-page walkthrough of the hero, the Renewals Due row, and the Recently Lapsed row instead, see Dues & Renewal: what this section shows and Dues statuses: current, grace, lapsed, and pending. This article is about provenance: where the numbers those pages display actually come from.
Where to find the pages this feeds
Dues & Renewal lives in the HQ sidebar under Membership, alongside Member Directory and Growth & Retention. It's reachable directly at hq.verinode.ai/dues. Dues & Renewal is an association-only surface; it only appears for HQ accounts configured to run on membership dues rather than franchise royalties.
The roster itself, and the tools that build it, live on a sibling page: Member Directory, at hq.verinode.ai/members. That's where an admin imports the CSV, works the verification queue, and can trigger a manual dues reconciliation. Dues & Renewal is a read-only view of the same roster; nothing on that page edits the roster directly.
The two things behind every number
Two pieces of data, both owned and maintained by your association, feed everything on Dues & Renewal:
- Your official membership roster. One row per member: company name, member number, city, state, current dues status, and renewal date. This is the record HQ treats as authoritative. It's what the hero percentage, the Renewals Due row, and the Recently Lapsed row all read directly.
- A log of dues events. Individual entries for the dues activity that happens over time: a payment posted, a renewal processed, a membership lapsing, or a dues waiver granted, each with an amount and a date where one applies. This log is the detail that stands behind a member's current status and renewal date, the record of what actually happened to produce the snapshot the roster carries. It doesn't render as its own list anywhere inside HQ; it exists as the backing history for the status and renewal date you see on the roster.
Both are things your association already tracks for its own billing and membership-renewal purposes. Verinode doesn't generate dues status, calculate eligibility, or decide when a membership lapses. It reflects what your own roster and dues records say.
Note
This page never sends renewal notices, collects a payment, or processes a renewal on your behalf. It's a rollup of records you already keep, not a billing tool.
How the roster gets here: import by an admin
The roster is not something Verinode builds for you. An admin on your association's HQ account imports it, and only an admin can. If you're signed in without the admin role, the import and reconcile actions return: "Only association admins can manage the roster." and nothing runs.
Import happens from the Member Directory page, under Import Roster. The exact instruction shown there reads: "Upload a CSV with columns: member_number, company_name, contact_email, city, state, dues_status, renewal_date. Re-importing updates existing members by member number."
company_nameis the only truly required column. Any row missing it is skipped entirely and never reaches the roster.member_numberis recommended, not required, but it's what makes re-importing safe. Rows carrying a member number are matched against your existing roster by that number: if a row with that number already exists, every field on it is overwritten with what's in the new file (company name, contact email, city, state, dues status, and renewal date all update in place). If no row with that number exists yet, it's added as new.- Rows without a member number can't be matched to anything already on file, so they're always inserted as new. Re-importing the same no-member-number row twice creates two separate roster entries rather than updating one, so a member number is worth including whenever your own system can supply it.
dues_statusonly recognizes three values on import:current,lapsed, orgrace. Anything else, a blank cell, a typo, or a different word entirely, is stored as unrecognized and shows on the roster as Pending.renewal_datetakes an ISO date (YYYY-MM-DD) and is what powers every "Renews in..." caption you see on Dues & Renewal.
If your file has no data rows, or every row is missing company_name, the import stops with: "No rows found. Expected a header row with company_name." and nothing is written.
A successful import reports back exactly how many rows landed: "Imported N member(s)." Full detail on preparing the file, re-import behavior, and troubleshooting duplicates lives in Importing your association roster.
How dues events feed status and renewal dates
The dues status and renewal date you see on any given roster row aren't recalculated by Verinode from first principles; they're whatever your association's own records say as of the last update. What updates them:
- A fresh CSV import. Re-importing with a new
dues_statusorrenewal_datefor an existing member (matched by member number) overwrites those fields directly. - Dues reconciliation, which runs automatically the instant an import finishes, and can also be triggered on demand. Reconciliation checks every member already verified on the Verinode platform: if their
dues_statusin the freshly imported roster differs from what's on file, their membership standing updates immediately, a member who moved to current is activated, and one who moved to lapsed is revoked. The result is reported back to you: "Imported N member(s). Dues sync: X activated, Y revoked." (or, with no changes to report, just "Imported N member(s)." with no dues-sync line). - Reconcile dues on demand. Next to Import Roster, a Reconcile dues button lets you re-check standing any time without uploading a new file, useful right after you manually correct a member's status. It reports "Reconciling..." while it runs and "Dues reconciled: X activated, Y revoked." when done.
The underlying dues events, the individual record of a payment, a renewal, a lapse, or a waiver, are the history that explains why a status or date changed. The roster row is the current snapshot; the events log is the paper trail behind it. Full detail on what reconciliation actually activates or revokes, and how the four statuses behave, is in Dues statuses: current, grace, lapsed, and pending.
Recomputed live, not on a batch delay
Dues & Renewal recalculates from your current roster the moment you load the page. There's no overnight batch step in between. If an admin runs an import or clicks Reconcile dues and then reloads Dues & Renewal, the hero percentage, the Renewals Due row, and the Recently Lapsed row all reflect that change immediately, no waiting for a nightly refresh.
What every number is actually built from
- Dues current percentage: current members divided by total members on the roster, rounded to the nearest whole percent, recalculated fresh from the roster on every page load.
- Lapsed, Renewals due 90d, Members (the three secondary figures): straight counts across the same roster snapshot: members in a lapsed status, members with a renewal date falling in the next 90 days, and the total roster count.
- Renewals Due row: every member with a renewal date on the roster falling within the next 90 days, ordered soonest first, drawn directly from each member's
renewal_datefield. - Recently Lapsed row: every member currently carrying a lapsed status, most overdue first when a renewal date is on file, drawn directly from each member's
dues_statusfield.
None of these rows involve a separate calculation engine. They're filters and sorts over the same roster your association imported.
The privacy boundary
Dues status and renewal dates are membership and billing information, the kind of thing your association already tracks to run renewals and collect dues. They are not a member's private business data. What Verinode HQ shows you here, company name, member number, city, state, dues status, and renewal date, is exactly what your own roster contains, nothing more.
What never appears on Dues & Renewal, on Member Directory, or anywhere else in HQ: a member's jobs, margin, revenue, client list, or any other operating detail. Members are memberships, not seats, and each one owns and controls their own operating data on their side of the platform regardless of what your association's roster records about their dues standing. Verinode surfaces who's due soon and who's already lapsed; your association's leadership decides how to follow up. See What HQ sees: the network privacy boundary for how this same boundary holds across every HQ section.
Empty states, verbatim
- Dues-current pill with no roster imported: "No roster imported yet"
- Summary line with no members at all: "Membership status will appear as roster and dues data flows in."
- Renewals Due row with nothing in the next 90 days: "Renewals due in the next 90 days will appear here as renewal dates flow in from the roster."
- Recently Lapsed row with no lapsed members: "No lapsed members. Lapsed dues will appear here as the roster updates."
- Member Directory's Members stat tile with an empty roster: "Import your roster to begin"
- Import with no usable rows: "No rows found. Expected a header row with company_name."
Heads up
If Dues & Renewal looks stale, that almost always means the roster itself hasn't been re-imported recently, not that Verinode is behind. Check Member Directory for when the roster was last updated before assuming a display problem.
Related help
- Dues & Renewal: what this section shows
- Dues statuses: current, grace, lapsed, and pending
- Importing your association roster
- Working the verification queue
- Member Directory: the reconciled membership model
- What HQ sees: the network privacy boundary
Data sources