TrackerGuru is a keyboard-focused desktop app for property agents to efficiently manage their contacts. It is designed for users who want to complete contact management tasks faster than conventional point-and-click tools.
Target users and assumptions:
In this section, you’ll learn how to install TrackerGuru, run your first command and get familiar with the interface.
TrackerGuru requires Java 17 or above installed on your computer. (See our FAQ: Section for instructions on how to check your Java version)
Download the latest TrackerGuru .jar file from the releases page on Github.
Move the .jar file into any folder on your device. This will be your home folder.
cd /path/to/your/home/folderjava -jar trackerguru.jar
In the command box, try any of the following commands. Press Enter to execute.
| Command | You Should Expect To |
|---|---|
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01 | Add a contact John Doe with his specified fields |
list | List all contacts |
delete 3 | Delete the 3rd contact displayed. |
clear | Delete all contacts in TrackerGuru ⚠️: This action is irreversible! |
exit | Exit the TrackerGuru application |
Refer to the Features: Section below for more details and commands
To access this User Guide anytime from the app, use the help command.
In this section, you’ll explore how to add, update and organise your contacts using TrackerGuru’s contact management commands.
Before proceeding with the commands in this section, please take a moment to review the notes below to understand the usage of command parameters and symbols, as well as understand how roles, tags and tag groups can be effectively utilised for contact organisation.
Parameters: UPPER_CASE words should be supplied by the user.
e.g. add n/NAME: replace NAME with an actual name such as add n/John Doe.
Optional fields: Items in [square brackets] are optional.
e.g n/NAME [t/TAG]: both n/John Doe t/friend and n/John Doe are acceptable.
Repeatable fields: Items followed by … can be repeated any number of times, including zero.
e.g. [t/TAG]…: valid usages are t/friend, t/friend t/family etc.
Flexible order: Parameters can appear in any order.
e.g. both n/NAME p/PHONE_NUMBER and p/PHONE_NUMBER n/NAME are acceptable.
Commands without parameters: help, list, exit, clear... will ignore any additional input.
e.g. help 123 is interpreted as help.
Each contact in TrackerGuru can have one or more roles that describe their professional relationship or purpose to you:
Why use Roles?
filter r/Landlord r/Tenant to find all landlords or tenantsExample Contact with Roles:
add n/John Tan p/91234567 e/john@example.com a/Blk 456 Bishan r/Buyer r/Lawyer
TrackerGuru supports two ways to tag your contacts:
Simple Tags: Basic labels without categories
t/vip, t/priority, t/urgentTags with Groups (recommended for organization): Tags organized into categories
t/GROUP.VALUEt/propertyType.HDB, t/location.Bishan, t/priceRange.500k-1MWhy use Tag Groups?
filter tg/propertyType to find all contacts with any property type tagExample Contact with Tag Groups:
add n/John Tan p/91234567 e/john@example.com a/Blk 456 Bishan r/Buyer t/propertyType.HDB t/location.Bishan t/priceRange.500k-1M t/priority
In this example:
propertyType.HDB - Tag with group (property type is HDB)location.Bishan - Tag with group (location is Bishan)priceRange.500k-1M - Tag with group (price range is 500k-1M)priority - Simple tag without groupNote:
Tag VALUES (the part after the dot) can contain symbols like hyphens (-), underscores (_), and dots (.) for more flexible categorization.
However, it has to start with alphanumeric, and can contain any combination after. For example, t/price.1.5M-2M is valid, but t/price.-2M is not.
addadd n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [r/ROLE]… [s/STATUS] [t/TAG]…Adds a person (see definition) to the address book.
Note:
Each person must have a unique PHONE_NUMBER and EMAIL.
Role is optional. You can add multiple roles by repeating r/ROLE but a contact made with duplicate roles will throw an error message. See Role in the glossary for more details.
Example: r/Buyer r/Investor is acceptable, r/Buyer r/buyer is unacceptable.
Status is optional. If provided, it must be Pending or Completed (case-insensitive). Each person can have only one status. See Status in the glossary for more details.
Tags are optional. See Tag in the glossary for more details. It can be formatted as either:
t/GROUP.VALUE: both GROUP and VALUE are alphanumerict/TAG: a single alphanumeric tagExamples:
add n/John Doe p/98765432 e/johnd@example.com a/John street, block 123, #01-01add n/Betsy Crowe p/12345678 e/betsycrowe@example.com a/Betsy street, block 123 r/Seller s/Completed t/friendadd n/Alex Tan p/87654321 e/alex@example.com a/Blk 456 r/Buyer r/Investor s/Pendingeditedit INDEX [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [r/ROLE]… [s/STATUS] [t/TAG]…Edits an existing person in the address book.
General:
INDEX.
INDEX refers to the number shown beside each person in the displayed list.INDEX must be a positive integer 1, 2, 3, …name, phone, email, and address will be replaced with the new values you enter.Tips:
r/ ONLY without any value.t/ ONLY without any value.s/ ONLY without any value.name, phone, email, and address must always contain a value.Caution:
r/ prefixes (e.g. r/Buyer r/Investor)./t prefixes (e.g. t/priority t/property.HDB).Examples:
edit 1 p/91234567 e/johndoe@example.com Edits the phone number and email address of the 1st person to be 91234567 and johndoe@example.com respectively.edit 1 s/Completed Edits the status of the 1st person to Completed. If the person did not have a status, it will be added.edit 2 n/Betsy Crower t/ Edits the name of the 2nd person to be Betsy Crower and clears all existing tags.edit 3 r/Buyer r/Landlord Replaces all existing roles of the 3rd person with Buyer and Landlord.edit 4 s/ Removes the status from the 4th person.findfind KEYWORD [MORE_KEYWORDS]…Finds persons whose names contain any of the provided keywords.
hans will match Hans).Hans Bo will match Bo Hans).Han does not match Hans).OR search).
Hans Bo will return Hans Gruber, Bo YangExamples:
find John returns john and John Doefind alex david returns Alex Yeoh, David Lifilterfilter [r/ROLE]… [s/STATUS]… [tg/TAG_GROUP]…Filters the current list for persons matching the specified parameters.
r/buyer will match r/BuyerExamples:
filter r/buyer returns all persons with the role buyerfilter s/pending s/completed returns all persons whose status is pending or completedfilter r/buyer s/completed tg/price returns all persons who are buyers, or whose status is completed, or has a tag whose Tag Group is pricedeletedelete INDEXDeletes the specified person from the address book.
INDEX.Examples:
list followed by delete 2 deletes the 2nd person in the address book.find Betsy followed by delete 1 deletes the 1st person in the results of the find command.listlistShows a list of all persons in the address book.
tgtg GROUP_NAMECreates a new Tag Group to organize your tags into categories.
Notes:
GROUP_NAME must be alphanumeric (letters and numbers only, no spaces or special characters).PropertyType and propertytype are different).t/GROUP.VALUE.Examples:
tg propertyType creates a Tag Group called propertyType.tg location creates a Tag Group called location.tg priceRange creates a Tag Group called priceRange.After creating a Tag Group, you can assign tags within that group to contacts:
add n/John Doe p/98765432 e/john@example.com a/123 Street t/propertyType.HDB t/location.Bishanedit 1 t/propertyType.Condo t/priceRange.500k-1Mdtgdtg GROUP_NAMEDeletes an existing Tag Group.
Important:
edit command), ORExamples:
dtg propertyType deletes the propertyType Tag Group (only if not in use).dtg location deletes the location Tag Group (only if not in use).Error scenarios:
The Tag Group propertyType does not exist.This Tag Group is currently in use and cannot be deleted. Please remove all tags associated with this group first.Tip: Use the tg command to list all your Tag Groups before attempting to delete one!
tgtgLists all Tag Groups you have created.
Notes:
Examples:
tg displays all existing Tag Groups such as propertyType, location, price, etc.statsstatsDisplays statistics about the status distribution of all contacts in your address book.
Example output:
Status Statistics:
- Pending: 45 contact(s)
- Completed: 23 contact(s)
- No Status: 12 contact(s)
Total: 80 contact(s)
Tip: Use this command to quickly see how many contacts are pending, completed, or have no status assigned!
clearclearRemoves all entries from the address book.
When you run this command, the application will ask for confirmation before proceeding.
You must type: y or Y to confirm and clear all entries, or n or N to cancel the action.
If you enter any other input on accident, the program will continue prompting until a valid response is provided.
Note:
y, Y, n, or N are all valid)exitexitExits the program.
helphelpOpens the following help window, which will direct you to this exact User Guide.
TrackerGuru data are saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
TrackerGuru data are saved automatically as a JSON file [JAR file location]/data/addressbook.json. Advanced users are welcome to update data directly by editing that data file.
Caution: All or Nothing Strategy
If your changes to the data file invalidate its format, TrackerGuru will currently ignore all existing data and display an empty data file at the next run instead. Hence, it is recommended to save a backup of the file before editing it.
Furthermore, certain edits can cause the TrackerGuru to behave in unexpected ways (e.g. if a value entered is outside the acceptable range). Therefore, edit the data file only if you are confident that you can update it correctly.
Note: The existing JSON file on disk will not be overwritten unless you run commands in TrackerGuru, so you must close the TrackerGuru application window to prevent any loss to your data.
A: To verify your Java version:
java -versionjava version "17.0.x" // or any higher version
Java(TM) SE Runtime Environment (build 17.0.x+xx)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.x+xx, mixed mode, sharing)
java -version to verify the correct version.A: Follow the Quick Start: Section to install the app on the new computer. Then, locate the new TrackerGuru home folder and replace its data folder with the data folder from your old computer.
preferences.json file (in the same directory as the JAR file) created by the application before running the application again.help command (or use the Help menu, or the keyboard shortcut F1) again, the original Help Window will remain minimized, and no new Help Window will appear. The remedy is to manually restore the minimized Help Window.| Action | Format, Examples |
|---|---|
| Add | add n/NAME p/PHONE_NUMBER e/EMAIL a/ADDRESS [r/ROLE]… [s/STATUS] [t/TAG] [t/GROUP.VALUE]… e.g. add n/James Ho p/22224444 e/jamesho@example.com a/123, Clementi Rd, 1234665 r/Buyer r/Investor s/Pending t/priority t/propertyType.HDB |
| Clear | clear |
| Delete | delete INDEXe.g. delete 3 |
| Edit | edit INDEX [n/NAME] [p/PHONE_NUMBER] [e/EMAIL] [a/ADDRESS] [r/ROLE]… [s/STATUS] [t/TAG] [t/GROUP.VALUE]…e.g. edit 2 n/James Lee e/jameslee@example.com s/Completed |
| Filter | filter [r/ROLE]… [s/STATUS]… [tg/TAG_GROUP]…e.g. filter r/buyer s/pending tg/price |
| Find | find KEYWORD [MORE_KEYWORDS]e.g. find James Jake |
| Create Tag Group | tg GROUP e.g. tg PropertyType |
| Delete Tag Group | dtg GROUP e.g. dtg PropertyType |
| List Tag Groups | tg |
| List | list |
| Stats | stats |
| Help | help |
Java is a programming platform used to run applications like TrackerGuru. TrackerGuru requires Java 17 or above.
GUI Stands for Graphical User Interface. It is the visual part of TrackerGuru that you interact with using windows, buttons, and text fields and displays all your contacts.
A Person represents an individual contact entry in TrackerGuru. Each person stores key information used by property agents to manage and categorize clients.
Fields:
n/) – The full name of the contact.p/) – The contact’s phone number.e/) – The contact’s email address.a/) – The contact’s physical address.Optional Fields:
r/) – See definition of Role.s/) – See definition of Status.t/) – See definition of Tag.Each Person is uniquely identified by their Phone or Email. Multiple optional fields (Role, Status, Tag) allow you to flexibly organize your contacts according to your workflow.
A Role represents the professional relationship of a contact in your address book.
Each contact can have multiple roles but cannot have duplicate roles.
Common roles include:
Case-insensitivity:
buyer, Buyer, and BUYER are treated as the same role.
Using both r/buyer and r/BUYER in a command will result in a duplicate role error.
Format rules:
-, and underscores _.A Status tracks the progress or state of your interaction with a contact. Each contact can have only one status (or none).
Valid status values:
Status values are case-insensitive (e.g., "pending", "Pending", and "PENDING" are all valid). Only these two values are allowed.
A Tag is an optional label used to provide additional information about a contact. A Tag can also optionally contain a Tag Group (see definition), allowing it to be categorised under a specific group.
Note:
Common tags include:
Tags are case-sensitive (e.g., "VIP" and "vip" are treated as different tags).
A Tag Group organizes tags into broader categories for more structured classification. It is a way to group related tags under a shared category.
How it works:
tg GROUP_NAME command.t/GROUP.VALUE.Common Tag Groups include:
t/PropertyType.Condo, t/PropertyType.Landed, t/PropertyType.HDBt/Location.Bishan, t/Location.Woodlands, t/Location.Sengkangt/Project.X, t/Project.Y, t/Project.ZTag Groups are also case-sensitive (e.g., "Client" and "client" are treated differently), and are automatically saved and persist across sessions.