Sooner or later the standard screens stop answering your question. You want every member with an unpaid invoice, or everyone who came to two events last year, or a list you can hand to a colleague each Monday. Search Kit is the tool in CiviPlus for building exactly that list — you choose which records to search, how to narrow them down, and which columns to show.
This page walks through building one search from scratch, using a worked example: the invoices your members have not paid yet. It is written for administrators, and everything here happens in the back office.
This page is about building the search. Once you have one, the next step is usually to give your colleagues a tidy page they can open themselves — see Turning a search into a page with Form Builder.
What can I do in CiviPlus?
Search any type of record — contacts, contributions, memberships, events, activities and more — and pull in related records alongside them.
Filter on any field, combine conditions, and group rows together to get totals and counts.
Choose your own columns, rename them, and link them straight through to the record.
Save the result so it can feed a page for your colleagues, a smart group for mailings, or a set of tokens.
Before you start
What this needs: Search Kit is an administrator tool. You need a CiviPlus login with administrator rights to reach it. The people who will eventually read your report do not need those rights — that is what the Form Builder page in the companion article is for.
Three things, not one. It helps to know the vocabulary before you start, because the screen uses all three words:
A search is the question — which records, filtered how.
A display is one way of showing that search's answer, usually a table. One search can have several.
A form is the page your colleagues actually open, built around a display.
Nearly every "why doesn't my page look like my table?" question comes down to these three being confused with each other.
Step 1 — Start a new search
Go to Search > SearchKit.
The page lists your Custom Searches, the Packaged Searches that came with CiviPlus, and any Data Segmentation rules.
Click NEW SEARCH.
The Search for box at the top is the record type you are asking about. It starts on Contacts, which is what our example needs. Your search is given a working title like Contact Search by you@example.org — you will replace that at step 5.
Step 2 — Bring in the related records
Our question is about invoices, which live on contributions rather than on the contact. Pull them in with a join.
In the row under Search for, open the + Entity list and choose Contact Contributions.
Click SEARCH to see what comes back.
Why your row count looks wrong. A join gives you one row per related record, not one row per person. In our demo data 12 contacts produced 18 rows, because one member has seven contributions and each one earned its own row. That is not a fault — but it catches everybody once.
The dropdown to the left of the entity controls who is included:
With (optional) — everyone, whether or not they have a contribution. This is the default, and it is why contacts with no invoices at all were in the list.
With (required) — only contacts who have at least one contribution.
Without — only contacts who have none. Useful for "who has never given?" style questions.
Switch ours to With (required) and search again: the demo list drops from 18 rows to 10 — one per contribution, contacts with none now excluded.
If you want one row per person rather than one per record, add a Group By on Contact ID. The 10 rows become 4, and Search Kit switches the amount column to (Sum) Contact Contributions: Total Amount — so each member now shows their total rather than a single payment.
Our worked example wants one row per unpaid invoice — an invoice is the thing being chased — so leave the grouping off and carry on.
Step 3 — Filter down to the rows you want
Click Filter Conditions in the left-hand panel.
In the Where row, open Select field and choose Contribution Status.
Leave the operator as = and set the value to Pending.
Click SEARCH. Our demo list is now the 4 genuinely unpaid invoices.
Where or Having? Use Where for conditions on the records themselves — status, date, amount. Having is for conditions on a grouped total, such as "members whose contributions add up to more than £500". If you are not grouping, you want Where.
Step 4 — Choose your columns
Click Select Fields. Every column currently in the results is listed here, and the Add box at the bottom searches the whole field list — including fields from the records you joined in.
Add the fields your reader needs. For the example: Primary Email Email, Contribution Date and Financial Type.
Remove the ones they don't: click the ✕ next to Contact ID, Contact Type and Contact Subtype in the results header.
A field only appears in this list once the record it belongs to has been joined in at step 2. If you cannot find a field, that is almost always the reason.
Step 5 — Name it and save
Replace the working title in the box at the top with something a colleague would recognise — ours is Outstanding invoices.
Click SAVE.
Naming matters more than it looks. Displays, forms, smart groups and tokens all point back at the search by name, so a search called "test 2" will still be called that in a year when six things depend on it. Rename it now, not later.
Step 6 — Build the table
A saved search on its own returns a plain result grid. A display is where you control how it looks.
Click + ADD... in the left-hand panel. The menu offers Smart Group and, under Display: Table, List, Grid, Autocomplete, DB Entity and Tokens.
Choose Table.
Each column is a collapsible panel. Open one and you can set:
Header — what the column is called on screen. The defaults are literal and long: Contact Contributions: Total Amount reads far better as Amount.
Link — makes the value clickable. Tick it on the name column and choose VIEW CONTACT, so a reader can jump from a row to the record. You can open it normally, in a New tab, or in a Popup dialog.
Rewrite Text, Allow HTML, Tooltip, Empty placeholder, Alignment, Sortable Header, Icon and Style — for when the raw value isn't quite what you want on the page.
The Settings section above the columns covers the table as a whole: the default Sort by, whether it runs automatically or waits for a search button, page size, row striping, borders, No Results Text, and Show Totals in Footer.
Check the Actions Menu setting before anyone else sees this table. It starts as All Enabled, which puts every bulk task on the table's ACTION menu — including Delete Contacts and Update Contacts. Anyone who can open the finished page gets those tasks if their own permissions allow them. Open Settings > Actions Menu and untick everything the readers of this report have no business doing.
Click SAVE when the table looks right. VIEW RESULTS at the top of the page shows you the finished table.
Getting it in front of other people
A saved search is only useful once someone can act on it. There are three routes:
A page of their own — the usual answer, and the subject of Turning a search into a page with Form Builder.
A smart group — + ADD... > Smart Group turns the search into a group that keeps itself up to date, ready to mail.
Tokens — the Tokens display type lets a search feed values into emails and letters. See Search Kit Tokens.
When it doesn't look right
The same person appears several times. A joined record is multiplying the rows — see step 2. Either that is correct (one row per invoice) or you want a Group By.
Nothing comes back. Check the join type first: With (required) excludes everyone without a matching record. Then re-read your filters — two conditions joined with AND that can never both be true will always return nothing.
The field you want isn't in the list. Its record hasn't been joined in yet. Add it at step 2 and the fields appear.
You need to see what it is really doing. The Query Info tab shows the underlying query — worth a look before raising a ticket, and worth quoting if you do.
A note on speed. A search with several joins and no filters has to work through every record each time somebody opens it. Give a report a sensible default filter and a page size, especially one that colleagues will open daily.
Checking it worked
That's it — your search is saved and has a table to show it. Reopen it from Search > SearchKit: it appears under Custom Searches, with its display counted in the Displays column. Click VIEW RESULTS and check the rows are the ones you expected, and that the totals match a figure you can verify elsewhere.
Related articles
Turning a search into a page with Form Builder — the companion page: give your colleagues a proper page, with filters and permissions.
Using a report page in CiviPlus — what your colleagues need to know once the page exists.
Search Kit Tokens — using a search to create your own tokens for emails and letters.
Reports and Dashboards — the reporting options that come with CiviPlus out of the box.










