Free tools Windows power users keep installed
One-click scans. No signup required.
Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.
Yes—you can build a useful small-business CRM in Microsoft Access without writing much code. A practical first version can track companies, contacts, sales opportunities, activities, notes, and follow-ups, then turn that data into searchable forms, pipeline reports, and overdue-task lists.
This guide is for Windows users working with Access for Microsoft 365 or Access 2024. Older versions may use slightly different menu labels. The result is a desktop CRM, not a browser-based or mobile-first service.
What you will build
Your finished Access CRM can include:
- Company and contact records
- Leads and sales opportunities
- Sales stages, values, probabilities, and expected close dates
- Calls, emails, meetings, tasks, and notes
- Due and overdue follow-up lists
- Search and filtering
- Pipeline, activity, and inactivity reports
- A home screen for navigation
Access is built around tables, queries, forms, reports, macros, and modules. Tables store information, relationships connect it, queries analyze it, forms provide the interface, and reports present the results. Microsoft explains this basic structure in its Access database guide.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Repair Windows errors before they cause bigger problemsFix Now →Is Microsoft Access a good CRM platform?
Access is a reasonable choice for one person or a small Windows-based office that wants a tailored internal system without paying for a full CRM platform. It works particularly well when the business already uses Microsoft Office, needs custom fields and reports, and can manage its own files and backups.
#1 Best Overall
It is a poor fit when the team needs browser or mobile access, public customer portals, extensive marketing automation, many integrations, complex permissions, or a distributed remote-workforce application. Access can be shared, but it remains a file-based desktop database rather than a hosted CRM.
Microsoft lists a nominal 2 GB database file-size limit and up to 255 concurrent users. Those are specifications, not sensible targets for a CRM deployment. Network quality, attachments, query design, locking, and concurrent editing can create practical limits much earlier. See Microsoft’s Access specifications before planning a larger system.
Plan the CRM before opening Access
Write down the business rules first:
- What counts as a company or account?
- Can one contact belong to more than one company?
- Does a lead become a contact, an opportunity, or both?
- Which sales stages will you use?
- Which activities require a due date?
- Who can view, edit, export, or delete records?
- Which reports will someone actually use?
- Will documents live in Access or in a separate document system?
Start with companies, contacts, opportunities, activities, and follow-ups. Trying to reproduce Salesforce or HubSpot in the first version usually creates a complicated database that nobody maintains.
Create the database
- Open Access.
- Select File > New > Blank database.
- Name the file something such as
SmallBusinessCRM.accdb. - Choose a local working folder and select Create.
Microsoft documents this workflow in its Access database instructions. Build the database in a local folder while designing it. Do not develop directly inside a shared network folder.
Access templates can supply tables, forms, queries, reports, and relationships, but a blank database is usually better for a CRM with a deliberate data model. Microsoft also documents modifying template databases.
Build the CRM tables
Use Table Design for each table. Give every main table a primary key, normally an AutoNumber field. Save tables with clear names such as tblCompanies. Microsoft’s table guidance covers fields, primary keys, indexes, and field properties.
tblCompanies
| Field | Type | Purpose |
|---|---|---|
| CompanyID | AutoNumber, primary key | Unique internal identifier |
| CompanyName | Short Text | Business or account name |
| IndustryID | Number | Industry lookup |
| Phone, Email, Website | Short Text | Main contact details |
| Address1, City, StateProvince, PostalCode | Short Text | Address information |
| StatusID, OwnerID | Number | Status and assigned user |
| CreatedAt | Date/Time | Creation timestamp |
| Notes | Long Text | General account notes |
tblContacts
| Field | Type | Purpose |
|---|---|---|
| ContactID | AutoNumber, primary key | Unique contact identifier |
| CompanyID | Number | Related company |
| FirstName, LastName | Short Text | Contact name |
| JobTitle, Email, MobilePhone | Short Text | Role and contact details |
| IsPrimaryContact | Yes/No | Main contact indicator |
| StatusID | Number | Contact status |
| Notes | Long Text | Contact notes |
tblOpportunities
| Field | Type | Purpose |
|---|---|---|
| OpportunityID | AutoNumber, primary key | Unique deal identifier |
| CompanyID, PrimaryContactID | Number | Related account and contact |
| OpportunityName | Short Text | Deal name |
| StageID | Number | Sales stage |
| Amount | Currency | Estimated value |
| Probability | Number | Percentage estimate |
| ExpectedCloseDate | Date/Time | Forecast date |
| OwnerID, LostReasonID | Number | Responsibility and loss reason |
| CreatedAt, Notes | Date/Time and Long Text | History and context |
tblActivities
| Field | Type | Purpose |
|---|---|---|
| ActivityID | AutoNumber, primary key | Unique activity |
| CompanyID, ContactID, OpportunityID | Number | Related records |
| ActivityTypeID | Number | Call, email, meeting, or task |
| ActivityDate, DueDate | Date/Time | Completed and follow-up dates |
| Subject | Short Text | Short description |
| Completed | Yes/No | Completion state |
| AssignedToID | Number | Responsible user |
| Details | Long Text | Conversation or task notes |
Create lookup tables such as tblUsers, tblCompanyStatuses, tblContactStatuses, tblIndustries, tblActivityTypes, tblOpportunityStages, tblLostReasons, and tblLeadSources.
Do not store repeated values such as “Proposal” or “Customer” as free-typed text in every row. Lookup tables keep spelling consistent and let an administrator change choices without redesigning forms.
Use practical normalization
Avoid one giant table containing company names, contact details, deals, and every interaction. That design repeats data and creates update errors. Store each company once, each contact once, and each activity as its own record. Link records with numeric keys.
Use Short Text for phone numbers and postal codes because they are not quantities to calculate. Use Currency for money, Date/Time for dates, Yes/No for binary states, and Long Text for notes. Foreign keys pointing to AutoNumber fields should normally be Number fields with the compatible Long Integer field size.
AutoNumber values are internal keys, not customer numbers, invoice numbers, or other meaningful business references.
Create relationships
Open Database Tools > Relationships, choose Add Tables, and add the relevant tables. Drag each primary key to its matching foreign key, select Enforce Referential Integrity, and save the layout. Microsoft explains this process in its relationship guide.
Typical relationships are:
tblCompanies.CompanyIDtotblContacts.CompanyIDtblCompanies.CompanyIDtotblOpportunities.CompanyIDtblCompanies.CompanyIDtotblActivities.CompanyIDtblContacts.ContactIDtotblActivities.ContactIDtblOpportunities.OpportunityIDtotblActivities.OpportunityIDtblUsers.UserIDto owner and assigned-user fields- Lookup-table IDs to their corresponding records
Be cautious with Cascade Delete Related Records. Deleting a company could remove its contacts, opportunities, and activity history. For business records, an inactive status is often safer than physical deletion.
Build the company form and subforms
Create these forms:
frmHomefrmCompaniesfrmContactsfrmOpportunitiesfrmActivitiesfrmTasksDuefrmSearch
Make the company form the central record. Put company details in the main form and contacts, opportunities, activities, and open tasks in subforms.
Rank #3
- The Microsoft Office 365 Bible: The Most Updated and Complete Guide to Excel, Word, PowerPoint, Outlook, OneNote, OneDrive, Teams, Access, and Publisher from Beginners to Advanced
- ABIS BOOK
For a contacts subform, use tblContacts as its record source, then set:
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →- Link Master Fields:
CompanyID - Link Child Fields:
CompanyID
The same pattern works for opportunities and activities. Microsoft’s form documentation covers form creation and split forms.
Use combo boxes for stages, statuses, industries, and users. Lock or hide primary keys, use business-friendly labels, and add buttons for New Contact, New Activity, and New Opportunity. Put the next open follow-up where it is visible, and use conditional formatting to highlight overdue tasks.
Add validation and data-quality controls
Useful controls include:
- Require
CompanyName. - Require either an email address or phone number for a contact.
- Prevent negative opportunity amounts.
- Limit probability to 0 through 100.
- Require an expected close date for active opportunities.
- Require a lost reason when an opportunity is marked lost.
- Warn before deleting a company with related records.
- Use unique indexes only where duplicates are genuinely invalid.
Examples of field validation rules are:
Amount >= 0
Probability Between 0 And 100
[StageID] <> 4 OR [LostReasonID] Is Not Null
The last example assumes stage 4 means “Lost.” Change that value to match your own lookup table; do not hard-code a stage number without documenting it.
Create useful saved queries
Save queries and reuse them as form and report record sources. Centralizing SQL is easier to maintain than embedding separate versions in multiple forms.
Recommended Free Tools
Open follow-ups
SELECT a.ActivityID, a.CompanyID, c.CompanyName, a.ContactID, ct.FirstName & " " & ct.LastName AS ContactName, a.Subject, a.DueDate, a.AssignedToID
FROM (tblActivities AS a INNER JOIN tblCompanies AS c ON a.CompanyID = c.CompanyID)
LEFT JOIN tblContacts AS ct ON a.ContactID = ct.ContactID
WHERE a.Completed = False
AND a.DueDate Is Not Null
ORDER BY a.DueDate;
Overdue activities
SELECT a.ActivityID, c.CompanyName, a.Subject, a.DueDate
FROM tblActivities AS a INNER JOIN tblCompanies AS c
ON a.CompanyID = c.CompanyID
WHERE a.Completed = False
AND a.DueDate < Date()
ORDER BY a.DueDate;
Pipeline summary
SELECT s.StageName,
Count(o.OpportunityID) AS OpportunityCount,
Sum(o.Amount) AS PipelineValue,
Sum(o.Amount * Nz(o.Probability, 0) / 100) AS WeightedValue
FROM tblOpportunityStages AS s
LEFT JOIN tblOpportunities AS o ON s.StageID = o.StageID
WHERE o.ExpectedCloseDate Is Null
OR o.ExpectedCloseDate >= Date()
GROUP BY s.StageName
ORDER BY s.StageName;
Nz() prevents null amounts or probabilities from turning calculations into blanks. A weighted opportunity value should normally be calculated rather than stored, so it cannot become stale when amount or probability changes.
Recent activity by company
SELECT c.CompanyName, Max(a.ActivityDate) AS LastActivityDate
FROM tblCompanies AS c
LEFT JOIN tblActivities AS a ON c.CompanyID = a.CompanyID
GROUP BY c.CompanyName
ORDER BY Max(a.ActivityDate);
Search by company name
PARAMETERS [Enter part of company name:] Text (255);
SELECT *
FROM tblCompanies
WHERE CompanyName Like "*" & [Enter part of company name:] & "*"
ORDER BY CompanyName;
Create reports and a home screen
Build reports from saved queries rather than raw tables when joins, filters, or calculations are involved. Useful reports include:
Rank #4
- Open opportunities by stage
- Pipeline by salesperson
- Overdue follow-ups
- Activities due this week
- Companies with no recent activity
- New leads by source
- Won and lost opportunities
- Revenue by month
- Contact directory
- Customer activity history
A simple frmHome can provide buttons for Companies, New Activity, Open Follow-ups, Opportunities, Pipeline, Overdue Tasks, Search, and Backup Instructions. Macros are enough for basic navigation. VBA is useful for advanced filtering, validation, Outlook messages, report exports, and linked-table refreshes, but keep the first version as simple as possible.
Import Excel contacts safely
- Make a copy of the workbook.
- Give every column a heading.
- Standardize types and remove merged cells.
- Remove duplicate companies and contacts.
- Import companies before contacts.
- Resolve company IDs before importing related opportunities or activities.
- Check dates, phone numbers, notes, and record counts after import.
Use External Data > New Data Source > From File > Excel, then select the workbook and follow the import wizard. Microsoft documents this workflow in its database creation guidance.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsA company name is not a safe foreign key. Duplicate names can attach a contact to the wrong account. Phone numbers may lose leading zeroes, dates may arrive as text, and long notes can be misclassified. Clean the data before importing it into the relational tables.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Share the CRM safely with a small team
For multiple users, split the database into:
- Back end: tables only, stored in a shared location
- Front end: forms, queries, reports, macros, and modules
Each user should have a local copy of the front end. Do not have everyone open the same front-end file from a network folder. Microsoft’s split-database guidance explains the Database Splitter Wizard and linked tables.
- Back up the database.
- Open it locally.
- Use the database-splitting command under Database Tools.
- Place the back end in a properly secured shared folder.
- Give every user a local front-end copy.
- Test linked tables from each workstation.
- Use Linked Table Manager if the back-end path changes.
Use a stable UNC path where possible, configure file-share permissions, and test simultaneous edits. Avoid placing a live multi-user Access back end in a consumer synchronization folder such as a continuously syncing OneDrive directory unless the deployment has been specifically tested and supported. Compact and repair during a maintenance window when nobody is connected.
Backups, security, and maintenance
Schedule backups of the back-end file, keep multiple generations, maintain an independent off-device copy, and test restoring one. A copied file is not a proven backup until restoration has been tested.
Keep versioned front-end releases so you can distribute a known-good update. Document what happens after accidental deletion, broken links, a damaged file, or a network outage.
Best Value
Access security depends heavily on Windows accounts, file-share permissions, database configuration, encryption, backups, and operational discipline. A split database separates interface files from data, but it does not provide complete role-based authorization, audit history, or enterprise identity management.
Minimize sensitive personal data. Do not store passwords, payment-card information, or unnecessary confidential information in the CRM. Restrict access to the back end and document who may export data.
Attachments and email history
Large attachments consume the database’s file-size budget and can reduce performance. A maintainable pattern is often to keep documents in a controlled SharePoint, OneDrive, or other document system and store a link or document identifier in Access.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchFor email, consider logging sender, recipient, date, subject, and a concise summary instead of importing every message. Keep Access focused on structured customer and activity data.
When Access is no longer the right tool
Consider a SQL Server back end when the database approaches its file-size limit, users experience locking or performance problems, centralized administration is required, or the organization needs stronger server-backed data management. Access can remain the front end, but migration may require query, permissions, schema, and testing changes. Microsoft provides Access-to-SQL Server migration guidance.
Consider Power Apps and Dataverse when browser and mobile access, Microsoft identity integration, cloud collaboration, workflow automation, or role-based access matters more than the simplicity of a desktop file. Review Microsoft’s Power Apps and Dataverse information; pricing and licensing can be more complex.
Choose an off-the-shelf CRM when immediate deployment, email synchronization, mobile applications, marketing automation, customer portals, or vendor-managed hosting are priorities. Examples include HubSpot CRM, Salesforce Sales Cloud, Zoho CRM, and Dynamics 365 Sales. Their current prices were not established here and should be checked directly.
Access licensing and cost context
Access is not universally free. Microsoft may include it in certain Microsoft 365 plans, or it may be purchased separately. Microsoft’s US Store showed $179.99 for Access for one PC on August 18, 2026, but price, availability, region, and checkout terms can change. See the official Access page.
Microsoft’s US business comparison pages showed these annual-billing price signals on August 18, 2026: Apps for business at $10.00 per user per month, Business Standard at $12.50, and Business Premium at $22.00. Treat these as dated US observations, not permanent prices. Confirm that your selected plan includes desktop Access and matches your organization’s licensing needs.
Pre-launch testing checklist
- Add a company and several contacts.
- Create an opportunity with a stage, amount, probability, and close date.
- Record an activity and create a follow-up.
- Mark a task complete and confirm it leaves the open-task list.
- Check overdue activities.
- Search by company, contact, and email.
- Edit a lookup value and confirm forms still work.
- Test deactivation and deletion behavior.
- Import a sample Excel file.
- Open the system as a second user.
- Test simultaneous edits and a lost network connection.
- Repair broken back-end links.
- Restore a backup.
- Install a new front-end version.
- Compare report totals with known sample data.
A well-designed Access CRM can replace disconnected spreadsheets for a small Windows-based business. The important decisions are not the colors of the forms; they are the data model, relationships, follow-up workflow, deployment method, backups, and the point at which a server-backed or cloud platform becomes more appropriate.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.

