← Al Davies, 250 High Street

A membership dues tracker in SharePoint

Short answer: build the tracker around the renewal cycle. One dues year equals one batch of rows. Keep a "Members" list for who belongs and a "Dues" list where each member gets a fresh row every year, holding the due date, the amount owed, a Paid flag, the date paid and the amount received. A lookup column links each row back to its member. Three saved views cover the work: "Owes, past due", "Renewing next 30 days" and "Member history". The tracker is a record of what you type. It takes no money, sends no payments, and says nothing about the rules that govern your club or association, so put those questions to your treasurer, attorney or accountant. Microsoft updates its screens, so the labels below may not match yours exactly.

How one dues year runs

Picture the year as a loop with four beats:

  1. Open: the treasurer adds one row per active member, each marked unpaid.
  2. Collect: as money arrives, the matching row gets a date and an amount.
  3. Chase: a saved view shows who still owes after the due date has passed.
  4. Close: lapsed members are marked, and next year's batch opens on the same list.

Nothing is overwritten between years. Last year's rows stay put, so a question about an earlier year is answered by filtering, not by hunting through old files. If you are still on a file, see "Replace a spreadsheet tracker with a SharePoint list" first. For volunteer time instead of dues, see "A volunteer hours tracker in SharePoint for a nonprofit". This guide covers only the member and dues records and does not repeat the basics of building a list.

Why a single sheet falls short

Club records may begin in one spreadsheet with a column for this year's dues. A small roster survives that. A bigger one hits trouble:

Scope: three lines for your officers

Our advice, not a Microsoft rule:

Build the "Members" list

Microsoft's help page on creating a list says: "Or, you can create a new list from your SharePoint site home page or the Site contents page, select + New > List." It describes a blank list this way: "Choose to start a list from scratch." And it says: "Select Create." Name the list "Members". To add columns, Microsoft says: "select + Add column." Start at https://www.microsoft365.com and open your team's SharePoint site. Exact names may differ.

Add these columns:

  1. Title (Single line of text). This column exists already and is required by default. Rename it "Member" or turn off the Require setting, then put the name as your club writes it.
  2. Membership type (Choice). Numbered so your order is kept: 1 Individual, 2 Family, 3 Student, 4 Honorary. Swap in your own types.
  3. Yearly dues (Number). Use Number for every dues figure in both lists. Microsoft's page on lookup columns puts Currency in its "Unsupported column types:" list. A Number column can be pulled into the Dues list through a lookup later. A Currency column cannot.
  4. Join date (Date and Time, date only).
  5. Renewal month (Number). The month when dues fall due, such as 9 for September. It guides whoever opens the next batch.
  6. Status (Choice). Numbered: 1 Active, 2 Lapsed, 3 Resigned.
  7. Contact (Single line of text). Start with an email address only.

Enter five or six members and check the columns before adding the rest.

Build the "Dues" list

Create a second blank list called "Dues". A row is one member in one dues year, so five years of history means five rows. Columns, in order:

  1. Title (Single line of text). Rename it "Dues year" or switch off Require. A value such as "Member 112, 2027" reads clearly.
  2. Member (Lookup). Choose Lookup when you add the column. Microsoft says: "Under Select a list as a source, select the source list to get information from." Point it at "Members". Microsoft also says: "Under Select a column from the list above, select what information you want to display from the source list". Choose "Member". Microsoft says: "Lookup columns should be created and used within the same site." Keep both lists on one site.
  3. Due date (Date and Time, date only). The day payment is expected.
  4. Amount due (Number). Typed on the row, in Number like the yearly dues figure.
  5. Paid (Yes/No). Set its default value to No in the column settings. Switch it to Yes only once the whole amount is in. The two filtered views depend on this flag.
  6. Date paid (Date and Time, date only). Blank until money arrives.
  7. Amount received (Number). Member 112 owes 60 and mails a check for 30: type 30 here. Paid stays No until the second check lands.
  8. Payment method (Choice), numbered: 1 Check, 2 Bank transfer, 3 Cash, 4 Other. Type the method, never the check or account number.
  9. Notes (Multiple lines of text). Facts only, such as "Second half due at the spring meeting".

Open a dues year and log payments

Opening a year means creating one "Dues" row for every Active member. Pick the member, set the due date, copy the figure from Yearly dues into Amount due and leave Paid at No. Our advice, not a Microsoft rule: give this job to one person with a fixed calendar date, so nobody is skipped. Because the amount sits on the row, a later price change never rewrites earlier years. A member who joins mid-year gets a row too, at the amount your officers decide. This guide takes no position on proration.

Logging a payment happens on that same row. Fill in Date paid, Amount received and Payment method, then compare received to due. A match means Paid goes to Yes. A shortfall keeps Paid at No with a one-line note, so the row stays on the chase view until the balance arrives.

The "Owes, past due" view

Open this view first. It shows rows whose due date has passed with no full payment.

  1. In "Dues", open the view menu and choose "Edit current view" for the classic view editor, or start a new view named "Owes, past due".
  2. Under "Filters", choose "Show items only when the following is true".
  3. First condition: Due date, "is less than", [Today].
  4. Add an And condition: Paid, "is equal to", No.
  5. Sort by Due date, oldest first, and save.

Microsoft's help page on filtering a view says: "It is not possible to use the [Today] or [Me] filters when filtering using a column header." It also says: "You must use the classic view editor to filter columns using these keywords." Our advice, not a Microsoft rule: build blank and "is not equal to" conditions in the classic editor as well.

Without the Paid condition, every past row would stay on the list for good.

The "Renewing next 30 days" view

This view looks ahead. Use the classic view editor with three conditions joined by And:

  1. Due date is greater than or equal to [Today].
  2. Due date is less than or equal to [Today]+30.
  3. Paid is equal to No.

Sort by Due date, soonest first. On date math, a Microsoft page offers this sample: "To view only items that have changed in the past week, apply the filter Modified is greater than [Today]-7." Flip the minus to a plus and the window opens forward.

The "Member history" view

One question drives this view: what has Member 104 paid across the years? Create "Member history", sort by Member first, then by Due date with the newest at the top. A column-header filter is fine for a quick look, but a view saved for others belongs in the classic view editor.

An optional reminder flow

Views help only when someone opens them. A Power Automate flow can check the list each day. Open https://make.powerautomate.com and create a scheduled cloud flow. Exact names may differ. The full build is in "Send a reminder before a due date in a SharePoint list". Three settings matter for dues.

  1. In the SharePoint "Get items" action, set Filter Query to find dues rows due in 30 days, written as a range of one day: Due_x0020_date ge 'START' and Due_x0020_date lt 'END'. Microsoft says spaces in a column name are replaced with "_x0020_". Replace START with formatDateTime(addDays(utcNow(), 30), 'yyyy-MM-dd') and END with formatDateTime(addDays(utcNow(), 31), 'yyyy-MM-dd'). Use a range, not eq, so a date column with a time part still matches. Microsoft lists ge, lt and ne among the supported operators.
  2. Our advice, not a Microsoft rule: inside the loop, add a Condition that checks Paid is No before the email step, so paid members get no email.
  3. Microsoft's page on Get items says: "The default item limit is 100". It also says: "If you are working with large lists, you can increase this limit up to the list view threshold limit of 5,000." Set Top Count above the largest batch you expect on one day, and stay at or under 5,000. For a list over 5,000 rows, Microsoft says to turn Pagination on in the action settings.

Send the email to the person who handles dues until you have tested it with a fake member row. Whether to email members directly is your decision, and this guide does not say what you may send them.

Weekly check and year-end close

Choose a weekly slot for one person to open "Owes, past due":

  1. Look for payments that arrived but were never keyed. Enter them.
  2. Hand truly unpaid rows to your board. Lapsing or removing anyone is the board's call, and this guide offers no rule.
  3. Scan "Renewing next 30 days" to see what is coming.

At year end, set members who did not renew to 2 Lapsed in Status, then open the next batch. Keep the lapsed rows, because their older dues rows still point at them. For colored highlighting of late rows, see "Turn overdue rows red in a SharePoint list".

What to avoid

These slips break the tracker or expose data:

Honest limits

The tracker is only as accurate as the people who feed it. It cannot see your bank account, so a payment nobody entered does not exist in the list. Treat that as a habit problem and answer it with the weekly check.

Some jobs fall outside these two lists. Running balances across years, receipts and invoices each need extra columns or a flow, and the right method comes from your bylaws, not from SharePoint. The views are passive: they show rows when someone opens them, and nothing reaches a member unless you build the optional flow. Licensing for Power Automate is not covered here, so ask your admin before building that part.

When to get help

You can build all of this yourself in Microsoft 365. If you would rather have it built and tested for your team, I do that. A tracker like this is a fixed price: $5,000 for one, built in 2 weeks. See "What a SharePoint tracker costs to build". Bring one example of the problem to a free call.

Tell me what's still manual

I am Al Davies. I run 250 High Street LLC and build SharePoint trackers and Power Automate flows for operations teams. I work remotely. The first call is free, and I will not try to sell you anything.

See trackers I built: Tools I built

FAQ

Does this tracker collect dues or process payments?

No. It records what you type. Money moves through whatever method your club already uses, and you then enter the date and amount here.

Can this tell me how my club should handle dues, records or reporting?

No. Rules differ by club, by bylaws and by place. Ask your treasurer, attorney or accountant. The list only records what you decided.

Why use Number for yearly dues in the Members list?

Microsoft's page on lookup columns lists Currency under "Unsupported column types:". A Number column can be shown through a lookup, so the dues amount can appear on a dues row if you want it.

How do I show only unpaid dues that are past due?

In the classic view editor, filter Due date to "is less than" [Today], and add a second filter, Paid is equal to No. Microsoft says the [Today] filter needs the classic view editor. It does not work from a column header.

Can one member see another member's dues?

If they can open the list, yes. A view only changes what is shown. To limit access, use permissions, and ask your admin. Members do not need access to this list.

Sources