Plan the contact review your CRM needs
Maya has two contact records. One holds a won project; the other holds an inquiry for a different job. Bringing her contact details together should leave both jobs, their stages and their notes easy to trace.
Use this fictional example to prepare a contact map and a set of checks for your app brief. Overskill's CRM starting page helps you describe the workflow you want to build. Start with a preview that shows every proposed change before adding any ability to change real records.
The exercise uses six invented contacts. It prepares a proposal only. Keep real client information out of the public exercise.
Review the three candidate pairs
The fictional reviewer has already supplied these identity decisions. Similar names, phone numbers or shared email addresses alone do not establish that two records describe one person.
Scroll horizontally to compare all columns.
| Contact IDs | People in this example | Supplied decision |
|---|---|---|
| C01 and C02 | Maya Ellis and M. Ellis | The reviewer confirmed one person. A consolidation proposal may be prepared. |
| C03 and C04 | Jordan Lee and Casey Lee | Two people share a household email. Keep both contacts. |
| C05 and C06 | Sam Rivera at an old and a new email | The reviewer confirmed one person after an email change. A consolidation proposal may be prepared. |
Your app should record who made an identity decision, when they made it and what evidence they used. When that decision is missing, leave the pair for review. If you are still deciding what your source rows represent, use the spreadsheet mapping guide first.
Choose the contact and field values to keep
For Maya, choose C01 as the contact ID to retain. Preserve C02 as an alias: a recorded link from the old ID to the retained ID. Keep the original records so a reviewer can still see what each contained.
Then make each conflicting field choice explicit. This worked result chooses the full name from C01 and the phone number from C02. Both source records have the same email, so there is no email conflict for this pair.
Scroll horizontally to compare all columns.
| Field | C01 value | C02 value | Choice for this example |
|---|---|---|---|
| Name | Maya Ellis | M. Ellis | Maya Ellis, from C01 |
| Phone | +1-202-555-0101 | +1-202-555-0102 | +1-202-555-0102, from C02 |
| [email protected] | [email protected] | Same supplied value |
Choosing C01 as the retained ID does not settle which phone number is correct. The example's phone choice is an explicit exercise decision. In your own workflow, the reviewer needs evidence for it.
For Sam, retain C05 and select the new email from C06. The phone values also need a decision: C05 has a missing value and C06 has an empty text value. Neither supplies a phone number. For this worked result, choose C05's missing phone value and record C05 as its source. Your own workflow needs an explicit rule for missing and empty values; do not invent a number to complete the proposal.
Preview which records stay connected
This fictional exercise keeps the original records. Choose a surviving contact ID and the source of each conflicting value, then inspect the proposed relationships. Nothing is applied or sent.
Six contacts, five deals and six notes belong to the same fictional workspace. Supplied review decisions are scenario facts, not proof that this tool identifies people or authorizes access.
Original fictional contacts
| ID | Display name | Phone | |
|---|---|---|---|
| C01 | Maya Ellis | [email protected] | +1-202-555-0101 |
| C02 | M. Ellis | [email protected] | +1-202-555-0102 |
| C03 | Jordan Lee | [email protected] | +1-202-555-0103 |
| C04 | Casey Lee | [email protected] | +1-202-555-0104 |
| C05 | Sam Rivera | [email protected] | Not supplied (null) |
| C06 | Sam Rivera | [email protected] | Explicitly blank (empty string) |
Household contacts stay separate
C03 and C04 are different people sharing an email. Keep both IDs and their separate histories.
Exercise not started. No proposal has been prepared.
Current proposed plan as JSON
This text is a proposed map with the original snapshots. It is not an apply or undo operation. Editing any choice clears it.
Worked example without running the controls
Include C02 → C01 and choose C01 for the name and C02 for the phone. Include C06 → C05 and choose C06 for the email and C05 for the phone. The latter explicitly retains a null phone value from C05; blank and null are different source facts.
The proposed contact IDs are C01, C03, C04 and C05. C02 and C06 remain aliases. D01 and D02 both point to C01 but retain different deal IDs and stages. N01 and N02 likewise remain separate notes. All five deals, six notes and six permission-evidence records remain present. C03 and C04 stay separate. Permission evidence is not combined.
Build your contact-review preview
Edit the brief for your first version. Start build uses only this text; no exercise choices or plan are attached.
This fictional exercise prepares a proposal only. It does not change a CRM, decide identity or grant access to private records.
Trace every job and note
When both eligible pairs are resolved with C01 and C05 retained, the proposed contact map contains four retained contacts and two aliases. The original six-contact snapshot remains intact. There are still five distinct deals and six distinct notes.
Proposed relationships only. The original six-contact snapshot and separate communication evidence remain unchanged.
Open full-size imageScroll horizontally to compare all columns.
| Record | Original contact | Proposed contact | Detail that must remain |
|---|---|---|---|
| D01 | C01 | C01 | Brand refresh, won |
| D02 | C02 | C01 | Website inquiry, discovery |
| D03 | C03 | C03 | Garden studio, proposal |
| D04 | C04 | C04 | Workshop space, open |
| D05 | C05 | C05 | Quarterly support, active |
| N01 | C01 | C01 | Original note ID, author, time and text |
| N02 | C02 | C01 | Original note ID, author, time and text |
| N03 | C03 | C03 | Original note ID, author, time and text |
| N04 | C04 | C04 | Original note ID, author, time and text |
| N05 | C05 | C05 | Original note ID, author, time and text |
| N06 | C06 | C05 | Original note ID, author, time and text |
Read the individual rows as well as the totals. D01 and D02 now point to the same contact, but remain separate jobs with different stages. Jordan's and Casey's jobs remain attached to their respective contacts. N06 moves in the proposed map even though C06 has no deal.
Record the aliases C02 → C01 and C06 → C05 separately from the deal and note counts. An alias preserves an old contact reference; it is not another job or another person.
Keep communication evidence separate
Maya's source records contain conflicting email-permission evidence. Sam's old email has a recorded grant, while the new email has no supplied decision. Preserve each source entry with its address, decision and date. This exercise does not calculate a combined permission or send messages.
Choosing a preferred email changes a proposed contact field. Any future communication workflow needs its own review of the evidence and rules for that address.
Review again when inputs change
A proposal belongs to the source snapshot and choices that produced it. Keep the source version, reviewed pair IDs, retained IDs, field sources and before/after links together in the proposal.
If you change a field choice, the old preview should immediately stop being presented as current. It can remain visible as previous reviewed work, clearly labeled, while you complete another review. Missing choices or a failed review must not quietly reuse the previous result.
Recheck the whole source when preparing the final proposal. A changed note, deal stage, identity decision or permission entry can matter even when the contact count stays the same. A changed source requires a fresh review.
Build and test the preview workflow
Use the app brief builder to describe your first version. Keep the first test small enough that you can check every record.
Build a staff-only CRM contact review using fictional sample records. Only authorized staff in the same workspace may see contacts, candidate pairs, deals, notes or proposals.
Start with a preview-only workflow. Require a recorded identity review before a pair can be proposed for consolidation. Keep the household pair separate. Let the reviewer choose the retained contact ID and the source of each conflicting field.
Show original and proposed contact links for every deal and note. Preserve their IDs, stages, text, authors and times. Keep original snapshots and record the old contact IDs as aliases. Preserve communication evidence separately without deciding permission or sending anything.
Bind each proposal to the reviewed source snapshot. Editing a choice must invalidate the current preview immediately. Missing choices and changed sources must require review. Exclude applying or undoing a live merge from this first version.
Test the resulting app with accounts and data you control:
| Test | Expected result |
|---|---|
| Resolve Maya and Sam using the retained IDs above | Four proposed contacts, two aliases, five deals and six notes; every row matches the map. |
| Leave Maya's phone choice open | The proposal remains unresolved. The earlier preview is not offered as current. |
| Try to combine the household pair | The supplied keep-separate decision prevents consolidation. |
| Change a note after reviewing a proposal | The old proposal becomes stale and needs another review. |
| Repeat the same resolved choices | No extra contact, alias, deal or note appears in the proposed result. |
| Open a copied contact or proposal link as another workspace | The app denies access without exposing private details, including through search and exports. |
Use the private-record access guide to expand the account checks. A correct public exercise does not establish access control in the app you build. Review the actual saved records and account boundaries before considering a separate live-merge feature.