EstateMate is designed for property managers who need an efficient way to track tenant information and manage maintenance jobs.
This guide is designed to help property managers make the most out of EstateMate's features. Managing tenant contacts and tracking maintenance tasks efficiently is essential for smooth property operations. Inside, you will find step-by-step instructions, examples, and helpful tips to streamline your workflow so that you can keep your properties running smoothly.
Ensure you have Java 17 or above installed in your computer (Follow the guide here).
Mac users: Ensure you have the precise JDK version prescribed here.
Copy the file to the folder you want to use as the home folder. This is the folder where you would like to keep the .jar file for access, and where the app will store its data files.
Open your search bar by pressing the Windows key (or the search button for Mac).
Open a command terminal by typing "terminal" in the search bar and press "Enter". The command terminal is an app that is already in your computer.
Use cd [folder path] to navigate into the folder you put the jar file in, and use the java -jar estatemate.jar command to run the application.
A GUI (Graphical User Interface) similar to the below should appear in a few seconds. Note how the app contains some sample data.

Type a command in the command box and press Enter to execute it. e.g. typing help and pressing Enter will open the help window.
Some example commands you can try:
list : Lists all contacts.
tenant n/John Tan p/91234567 e/jtan@example.com a/Blk 123 #12-34, Bedok lease/2025-01-01 2026-12-31 r/2800.00 paydate/2025-01-01:
Adds a contact named John Tan to the application.
delete 3 : Deletes the 3rd tenant contact shown in the current list.
clear : Deletes all contacts.
exit : Exits the application.
Upon opening the application, you should see the following UI:

To input commands, use the input box at the top of the window. The available commands will be explained below.
In EstateMate, commands use prefixes to identify each parameter.
Each prefix must be followed by a / and its corresponding value.
| Prefix | Meaning | Example Usage |
|---|---|---|
n/ | Tenant name | n/John Tan |
p/ | Phone number | p/91234567 |
e/ | Email address | e/jtan@example.com |
a/ | Address | a/Blk 123 #12-34 |
lease/ | Lease period (start to end date) | lease/2025-01-01 2026-12-31 |
r/ | Rent amount | r/2800.00 |
paydate/ | The next rent payment deadline | paydate/2025-01-01 |
t/ | Tag | t/friend |
j/ | Job number | j/2 |
d/ | Description | d/Broken pipe |
đź’ˇTip:
Combine multiple prefixes in one command:
tenant n/John Tan p/91234567 e/jtan@example.com a/Blk 123 #12-34, Bedok lease/2025-01-01 2026-12-31 r/2800.00 paydate/2025-01-01
This section provides a comprehensive overview of the features available in EstateMate.
It is designed to help property managers understand how to efficiently manage tenant information and maintenance jobs
through various commands.
Each feature is grouped by functionality:
Words in UPPER_CASE are the parameters to be supplied by the user.
e.g. in tenant n/NAME, NAME is a parameter which can be used as tenant n/John Doe.
Items in square brackets are optional.
e.g. n/NAME [t/TAG] can be used as n/John Doe t/friend or as n/John Doe.
Items with …​ after them can be used multiple times including zero times.
e.g. [t/TAG]…​ can be used as  (i.e. 0 times), t/friend, or t/friend t/family etc.
Parameters can be in any order.
e.g. if the command specifies n/NAME p/PHONE_NUMBER, p/PHONE_NUMBER n/NAME is also acceptable.
Extraneous parameters for commands that do not take in parameters (such as help, list, exit and clear) will be ignored.
e.g. if the command specifies help 123, it will be interpreted as help.
If you are using a PDF version of this document, be careful when copying and pasting commands that span multiple lines as space characters surrounding line-breaks may be omitted when copied over to the application.
tenantAdds a tenant to the application.
Format: tenant n/NAME p/PHONE e/EMAIL a/ADDRESS lease/START END r/AMOUNT paydate/PAYDATE [t/TAG]…​
📌Note:
t/friendly, t/overdue, t/contractor, t/vip).find do not look at tags.
lease/START END refers to the lease period, specified as two valid calendar dates in the format yyyy-MM-dd yyyy-MM-dd, separated by exactly one space. The first date is the start date and the second date is the end date. The end date must be on the same day or after the start date.yyyy-MM-dd.

Examples:
tenant n/John Tan p/91234567 e/jtan@example.com a/Blk 123 #12-34, Bedok lease/2025-01-01 2026-12-31 r/2800.00 paydate/2025-01-01tenant n/Sarah Kim p/12398653 e/sarahk@example.com a/Blk 234 #56-78, Clementi lease/2025-02-02 2027-02-02 r/4000.00 paydate/2025-02-02âť— Warning:
a/, ensure that there is no space between the prefix and the address, for the input to be considered valid.
a/a/Clementi Avenue 1 will be considered acceptable input, while a/ a/Clementi Avenue 1 will not.đź’ˇTip:
deleteDeletes the specified tenant from the application.
Format: delete TENANT_NUMBER
📌Note:
TENANT_NUMBER is the index displayed next to each tenant in the tenant list, and must be a positive number between 1 and 2147483647.list or find commands) can be deleted.âť— Warning:
Examples:
list followed by delete 2 deletes the 2nd tenant listed in the application.find John followed by delete 1 deletes the 1st tenant in the results of the find command.đź’ˇTip:
list or find first to confirm the correct tenant before deleting to avoid accidental removal.editEdits an existing tenant in the application.
Format: edit TENANT_NUMBER [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [lease/START END] [r/AMOUNT] [paydate/PAYDATE] [t/TAG]…​
📌Note:
TENANT_NUMBER is the index displayed next to each tenant in the tenant list, and must be a positive number between 1 and 2147483647.edit 2 t/friendly t/overdue, the tenant will end up with only those two tags regardless of how many tags they had before.t/ without specifying any tags after it.Examples:
edit 1 p/91234567 e/johndoe@example.com edits the phone number and email address of the 1st tenant to be 91234567 and johndoe@example.com respectively.edit 2 n/Betsy Crower t/ edits the name of the 2nd tenant to be Betsy Crower and clears all existing tags.đź’ˇTip:
list or find first to confirm the correct tenant before editing to avoid overwriting important data.edit whenever you need to update a tenant's pay date to reflect a new rent payment deadline.
findFinds tenants whose names contain any of the given keywords.
Format: find KEYWORD [MORE_KEYWORDS]
📌Note:
hans will match Hans.Hans Bo will match Bo Hans.Han will not match Hans.Hans Bo will return Hans Gruber, Bo YangExamples:
find John returns john and John Doe.find alex david returns Alex Yeoh, David Li.đź’ˇTip:
listDisplays a list of all tenants currently stored in the application, ordered from the earliest added to the most recent.
Format: list
📌Note:
list command will be ignored.list without any tenants will show you an empty list, hence you are recommended to add some tenants to the application before using this command.
jobAdds a maintenance job to the application.
Format: job d/DESCRIPTION
📌Note:
d/ prefix will take the last use for the job description.
job d/Water leakage d/Pipe leakage will create one job with description Pipe leakage.Examples:
job d/Water leakage in ceilingjob d/Pipe leakageđź’ˇTip:
djobDeletes a maintenance job from the application.
Format: djob JOB_NUMBER
📌Note:
JOB_NUMBER is the index displayed next to each job in the job list, and must be a positive number between 1 and 2147483647.JOB_NUMBER is a unique number tied to each job, and will not be affected by the use of
ljob and fjob, unlike the TENANT_NUMBER of the delete command.âť— Warning:
Examples:
djob 2 deletes the job with job number 2 if it exists.đź’ˇTip:
ljob to double-check the job number before deleting to avoid removing the wrong job.ejobEdits a maintenance job in the application.
Format: ejob JOB_NUMBER d/DESCRIPTION
📌Note:
JOB_NUMBER is the index displayed next to each job in the job list, and must be a positive number between 1 and 2147483647.d/ prefix will take the last use to edit the job description.
ejob 1 d/Water leakage d/Pipe leakage will edit the description of job 1 to Pipe leakage.Examples:
ejob 3 d/fix faucet changes the description of the job with job number 3 to "fix faucet".đź’ˇTip:
ljob to confirm the job number.fjobFinds maintenance jobs whose descriptions contain any of the given keywords.
Format: fjob KEYWORD [MORE KEYWORDS]
📌Note:
pipe will match Pipe.Pipe leak will match leak pipe.Pipe will not match Pipes.Broken window will return Broken pipe, Window repairExamples:
fjob pipe returns pipe and Pipe Leakage.fjob aircon repair returns Aircon Leakage and Repair Pipe.đź’ˇTip:
pipe leakage instead of just pipe.aircon repair ceiling.linkLinks a maintenance job to a specific tenant so that the job can be tracked alongside its relevant tenants.
Format: link TENANT_NUMBER j/JOB_NUMBER
📌Note:
JOB_NUMBER is the index displayed next to each job in the job list.j/ prefix will take the last use as the job to link to the tenant.
link 1 j/1 j/3 will link only job 3 to the first tenant in the list.Examples:
link 1 j/2 links the 2nd maintenance job in the job list to the 1st tenant in the tenant list.
đź’ˇTip:
mark or unmark the job, the status will be reflected for all linked tenants.ljobDisplays a list of all jobs currently stored in the application, ordered from the earliest added to the most recent.
Format: ljob
📌Note:
ljob command will be ignored.ljob command without any jobs stored in the application will show you an empty list, hence you are recommended to add some maintenance jobs before using this command.markUpdates the status of a maintenance job to Completed so that you can track completed maintenance jobs easily.
Format: mark JOB_NUMBER
📌Note:
JOB_NUMBER is the index displayed next to each job in the job list, and must be a positive number between 1 and 2147483647.unmark command to revert it to Not Completed.mark will complete the job for all tenants linked to the job.Examples:
mark 2 updates the completion status of job number 2 of the job list to 'completed'.đź’ˇTip:
ljob to double-check the job list before using mark to ensure you’re updating the correct job.unmark to revert mistakes if a job is accidentally marked as completed.unmarkReverts a maintenance job's status to Not Completed in case it was marked as complete by mistake.
Format: unmark JOB_NUMBER
📌Note:
JOB_NUMBER is the index displayed next to each job in the job list, and must be a positive number between 1 and 2147483647.unmark will mark the job as not complete for all tenants linked to the job.Examples:
unmark 3 updates the status of job number 3 in the job list back to not completed.đź’ˇTip:
ljob to double-check the job list before using unmark to ensure you’re updating the correct job.mark to revert mistakes if you accidentally unmark a job.clearRemoves ALL tenants and maintenance jobs from the application.
Format: clear
âť— Warning:
This action is irreversible, all data will be permanently deleted. Make sure you have backed up any important tenant or job information before using this command.
đź’ˇTip: Use clear only when you want to start fresh or reset your tenant list.
exitCloses the program.
Format: exit
📌Note: All data entered will be automatically saved to storage.
helpOpens the help window which provides a link for accessing the user guide to get assistance with commands. This command is useful if you need a quick reminder on how to use the available commands.
Format: help
| Action | Format | Examples |
|---|---|---|
| Add Tenant | tenant n/NAME p/PHONE e/EMAIL a/ADDRESS lease/START END r/AMOUNT paydate/PAYDATE | tenant n/John Tan p/91234567 e/jtan@example.com a/Blk 123 #12-34, Bedok lease/2025-01-01 2026-12-31 r/2800.00 paydate/2025-01-01 |
| Add Job | job d/DESCRIPTION | job d/Water leakage in ceiling |
| Clear | clear | |
| Delete Tenant | delete TENANT_NUMBER | delete 3 |
| Delete Job | djob JOB_NUMBER | djob 3 |
| Edit Tenant | edit TENANT_NUMBER [n/NAME] [p/PHONE] [e/EMAIL] [a/ADDRESS] [lease/LEASE] [r/AMOUNT] [paydate/PAYDATE] [t/TAG]…​ | edit 2 n/James Lee p/23847674 e/jameslee@example.com a/Kent Ridge, Blk #520 lease/2025-01-01 2026-12-31 r/1234.56 paydate/2025-02-01 t/friend |
| Edit Job | ejob JOB_NUMBER d/DESCRIPTION | ejob 3 d/fix faucet |
| Exit | exit | |
| Find Tenant | find KEYWORD [MORE_KEYWORDS] | find James Jake |
| Find Job | fjob KEYWORD [MORE_KEYWORDS] | fjob electrical plumbing renovation |
| Help | help | |
| Link Job to Tenant | link TENANT_NUMBER j/JOB_NUMBER | link 1 j/2 |
| List Tenants | list | |
| List Jobs | ljob | |
| Mark Job | mark JOB_NUMBER | mark 1 |
| Unmark Job | unmark JOB_NUMBER | unmark 1 |
Q: How do I transfer my data to another computer?
A:
estatemate.jar is stored.data. Copy this folder into your other computer.data and delete it. Replace it with the folder you copied over from your original computer.preferences.json and delete it 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.