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:
- Open: the treasurer adds one row per active member, each marked unpaid.
- Collect: as money arrives, the matching row gets a date and an amount.
- Chase: a saved view shows who still owes after the due date has passed.
- 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:
- A new dues year means a new column, and after five years nobody can read the sheet.
- Member 112 sends half: the other half sits in a cell comment that no formula can add.
- Finding who owes means scanning every row by eye.
- Whoever built the sheet leaves, and the habits go with them.
Scope: three lines for your officers
Our advice, not a Microsoft rule:
- Your bylaws set the dues amounts, the grace period and what happens to a lapsed member. This guide sets none of them, so settle those with your board before the first row exists.
- The treasurer owns entry. One named person types in the rows and payments, which keeps the numbers consistent. Write facts only, such as "Member 104 paid $40 on March 3", with no opinions about anyone.
- No bank, card or ID numbers go in either list. Record the payment category and nothing else. Access also deserves a deliberate choice, because hiding a view does not protect rows: anyone who can open the list can open another view. Permissions are the control, and your admin can tell you which setup fits your site.
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:
- 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.
- Membership type (Choice). Numbered so your order is kept: 1 Individual, 2 Family, 3 Student, 4 Honorary. Swap in your own types.
- 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.
- Join date (Date and Time, date only).
- Renewal month (Number). The month when dues fall due, such as 9 for September. It guides whoever opens the next batch.
- Status (Choice). Numbered: 1 Active, 2 Lapsed, 3 Resigned.
- 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:
- Title (Single line of text). Rename it "Dues year" or switch off Require. A value such as "Member 112, 2027" reads clearly.
- 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.
- Due date (Date and Time, date only). The day payment is expected.
- Amount due (Number). Typed on the row, in Number like the yearly dues figure.
- 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.
- Date paid (Date and Time, date only). Blank until money arrives.
- Amount received (Number). Member 112 owes 60 and mails a check for 30: type 30 here. Paid stays No until the second check lands.
- Payment method (Choice), numbered: 1 Check, 2 Bank transfer, 3 Cash, 4 Other. Type the method, never the check or account number.
- 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.
- 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".
- Under "Filters", choose "Show items only when the following is true".
- First condition: Due date, "is less than", [Today].
- Add an And condition: Paid, "is equal to", No.
- 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:
- Due date is greater than or equal to [Today].
- Due date is less than or equal to [Today]+30.
- 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.
- 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.
- 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.
- 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":
- Look for payments that arrived but were never keyed. Enter them.
- Hand truly unpaid rows to your board. Lapsing or removing anyone is the board's call, and this guide offers no rule.
- 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:
- Pointing a lookup at a Currency column. Store the figure as Number if another list must display it.
- Skipping the Paid flag. Settled rows would sit in the chase view forever.
- Keeping an amount only as words in Notes. A figure has to sit in a Number or Currency column to be added or filtered.
- Putting bank, card or ID numbers anywhere in either list.
- Trusting a saved view to keep rows private. It only changes what is displayed.
- Leaving Title empty while Require is on. Rename it or switch off Require.
- Building "Members" and "Dues" on separate sites. The lookup needs one shared site.
- Deleting the row of someone who left. Set Status to 2 Lapsed so past dues rows still resolve.
- Entering a Top Count above 5,000 in a flow.
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.
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
- Microsoft Support, Use filtering to modify a SharePoint view
- Microsoft Support, Create a list
- Microsoft Support, Create list relationships by using lookup columns
- Microsoft Learn, In-depth analysis into Get items and Get files SharePoint actions