← Back to Haptco

Privacy Policy

Last updated: October 18, 2026

Haptco is a rental bookkeeping app for individual landlords, built and run by Neal Chou, who uses it to manage his own rentals. This policy explains what information Haptco holds, how it is used, and the choices you have. It is written in plain language on purpose.

The account you create

You create an account with your email address and a password. You can also add a name and phone number to your profile. Your email address is how we identify your account and how notification emails reach you.

The records you enter

Haptco stores the records you add to run your rentals: properties and units, leases, rent, late fees, expenses, maintenance requests, your vendor directory, quotes those vendors send back, listings, rental applications, and screening records.

Some of these records contain personal information about your tenants, applicants, and the vendors you add — names, contact details, lease terms, payment history, and screening details. You decide what to enter, and you are responsible for having a lawful basis to collect and store it. In plain terms, you are the owner of your tenants’ information; Haptco stores and processes it on your behalf so you can manage your rentals.

Haptco has an operator view, used from a separate support account and by nobody else, so that questions sent to support can be answered. It lists every account with its email address, when it was created, when it was last used, how many properties, units and tenants it holds, and when its first property, unit, tenant, expense and logged payment were added.

From that list an operator can open one account and see the records in it: your properties with their addresses, your units, your tenants’ names and contact details, your lease dates and rent, and your most recent rent charges and payments. It does not show your uploaded documents, your assistant conversations, or the contents of any message. Every time an account is opened, that is written to a log recording who opened it, whose account it was, and when — the record is written before the records are shown, so a look that leaves no trace is not possible.

Your account also carries a sign-up number, given in the order accounts were created, which is included when an operator opens your account. It decides nothing about what you can use. Haptco keeps no payment details about you, because it charges landlords nothing.

This exists to answer your questions, not to read your books. If you would rather nobody opened your account, email us and say so, and we will note it and ask before doing it.

The tenant portal link is worth treating as a key. Anyone holding it can see that unit’s rent without signing in — what is owed, any late fee, and the last six months of payments — alongside the maintenance requests for it. It is limited to the tenancy that is current today, so a new tenant never sees the previous one’s rent or requests, and it never shows a street address or another unit. Rent cannot be paid through it. If a link is forwarded to someone it should not reach, replacing it on the unit is what revokes the old one.

Rent and payments are records, not transactions

Haptco records rent, late fees, and payments as bookkeeping entries. It does not collect, hold, move, or process money, and there is no payment processor connected to the app. When a payment is marked paid, that is a note in your books, not a transfer of funds.

Files you upload

You can upload files such as listing photos, screening documents, expense receipts, and tenant or property documents. Tenants can also attach photos when they submit a maintenance request through their portal link. These files are kept in secure file storage provided by Supabase.

One exception is worth stating plainly: if you request quotes from vendors on a maintenance request, the photo attached to that request is shown on the private quote page each vendor opens from their email. Those vendors are not signed in to Haptco — the link itself is what lets them see it — so only request quotes on a job whose photo you are willing to show the contractors you picked.

AI features

Some features use AI. When you use one, the content it needs is sent to Anthropic’s API to produce a result:

  • Spreadsheet import — the spreadsheet you upload, so it can be read into your books.
  • Screening summary — the screening report you provide, so the AI can extract the printed figures and write a plain summary. The suggested pass, review, or fail outcome is produced from the criteria you set applied to the values you confirm — not by the AI; the decision is always yours.
  • Receipt scan — the receipt image, so the expense form can be pre-filled.
  • Lease scan — the lease you upload, so the tenant form can be pre-filled.
  • Assistant — your messages, and, when you ask about your portfolio, the property, tenant, and financial data the assistant reads to answer your question.

The AI model is Claude, made by Anthropic. Under Anthropic’s commercial API terms, the data sent through the API is not used to train Anthropic’s models. AI results are aids meant to save you time — review them before you rely on them.

Emails Haptco sends

Haptco can send you, the landlord, notification emails: an alert when a tenant submits a maintenance request, an alert when someone applies to one of your listings, an alert when a vendor answers a request for quotes, and a daily digest of things that need attention (overdue rent, leases ending soon, open maintenance, new applications, quotes you have not seen, and a monthly summary). There is also one you ask for directly: a test copy of the screening invite, sent to your own address when you press “Send myself a test invite” in Settings, so you can check the link works before an applicant relies on it. These are delivered through Resend, which receives your email address and the message. You choose which of the notifications you receive in Settings; the test copy is only ever sent when you press the button.

One check-in, once: the morning after you create an account, if it has no tenant in it yet, Haptco sends a short note from Neal, the founder, offering to set your records up for you. It is sent one time only, replying to it reaches him directly, and it is never sent to an account that already has a tenant.

Account emails — confirming your address and resetting your password — are sent through Supabase.

Stopping them: every automatic email above — the alerts, the daily digest and the check-in — carries, at its foot, a link that stops all of them in one click, and your email app may show its own Unsubscribe button that does the same. Opening the link changes nothing until you press the button on the page it opens, and that page shows your address only partly (for example, l•••@gmail.com). So the link can work without signing in, Haptco keeps a random code for your account, which only your emails carry, the time it was made, and the time you first used it. Afterwards you can turn any of the notifications back on in Settings; the check-in stays off. Account emails, and a test invite you send yourself, are not affected: they are sent only when you ask for them.

When Neal writes to you himself — separately from the automatic emails above, Neal sometimes writes to a landlord personally, usually to ask how the setup went or to offer to load a spreadsheet in for you. Haptco does not send that message. Pressing the button on his own operator page opens Gmail in his browser with your email address and a draft already written, and he reads it, edits it, and sends it from his own mailbox — so it reaches you from a person, and nothing goes until he sends it. Because his browser is the thing that opens Gmail, Google receives your email address and that draft at the moment the window opens, the same way it would if he typed your address into Gmail himself. Google is not one of Haptco’s service providers listed below, and no reply comes back into Haptco — it goes to his mailbox, like any other email.

Applicant email — when you send a screening invite, Haptco emails the applicant a link to the screening provider you configured, with your address as the reply-to. Haptco does not take payment for screening and does not run the check. There are two ways to check that link before an applicant depends on it, and neither involves anyone else. You can open it yourself from Settings: your browser goes to your provider exactly as it would if you typed the address, and Haptco adds nothing to it — no identifier, and nothing about the property or the applicant. You can also send yourself a test copy of the invite, which goes to the address on your own account and nowhere else — you cannot direct it elsewhere — and carries a made-up applicant and property in place of anyone real.

Finding a contractor — if you have no vendors saved, Haptco offers a link that searches a map provider for a trade near one of your properties. Nothing is sent unless you click it. The link carries the trade word, such as plumber, and the postal code of that property — or its town and state, where no postal code is saved — never the street address, never a tenant’s name, and nothing about the job. The map provider is not one of Haptco’s service providers listed below; it receives this only because your own browser goes there, the same way it would if you typed the search yourself. Haptco does not choose, rank, check or endorse anyone who appears in those results, and nothing comes back into Haptco — whoever you decide to use, you add yourself.

Address suggestions — while you type a property’s address into the address box on the add-property form or in the dashboard’s first-property box, what you have typed so far is sent from Haptco’s server, not from your browser, to Google Maps Platform (its Places service) to suggest matching addresses. Google receives that text and a random code that groups one round of typing, and nothing else: not your name, your email address, or the rest of your account. The suggestions themselves are never stored, except the one you pick, if you then save it. Picking a suggestion checks it with Google, as described under “Checking a property address” below. Google receives all this as an independent company, not as one of Haptco’s service providers listed below, and may keep and use it under its own privacy policy.

Vendor email — there are three ways to contact a vendor, and they work differently. The “Email” button on an assigned vendor opens your own email app, and that message is sent from your account, not from our servers. Requesting quotes is the second way: Haptco’s servers send that one for you, to the vendors you tick, through Resend. It is sent as “your name via Haptco”, your address is the reply-to, and the message says you asked us to send it and that replying is how a vendor asks to be taken off your list. The third is the acceptance notice: when you accept a vendor’s quote, Haptco emails that vendor to say they got the job, sent the same “your name via Haptco” way with your address as the reply-to — but automatically, the moment you click Accept, with no message to review first. For the latter two, Resend receives those vendors’ email addresses and the message. You are the sender of all three. For the “Email” button and the quote request, you choose the recipients and the wording before anything goes; the acceptance notice has no such step — it goes automatically, worded from the accepted quote’s details, to whichever vendor you just chose to hire.

Checking a property address

When you add a property and type its address yourself, rather than picking one of the address suggestions described above, Haptco checks it with Google Maps Platform (its Address Validation service) as soon as you move on from the address fields — before you save, and whether or not you then save — once for each different address you type, and may show a corrected version, which you can use or ignore. The check is sent from Haptco’s server, not from your browser. Google receives the street address, city, state and ZIP code you typed, and nothing else: not your name, your email address, your tenants, or the rest of your account. Google receives it as an independent company, not as one of Haptco’s service providers listed below, and may keep and use it under its own privacy policy.

The same check runs in the first-property box on the dashboard, under the same rules, when you move on from the box having typed an address that ends in a ZIP code or names the town after a comma; a shorter address there is not checked. When you pick a suggestion instead, that address is checked once, the same way, straight away, and the form is filled with the version Google confirms (or with the suggestion as shown, if the check finds nothing); no “We found this address” note appears for it. Haptco keeps nothing else from Google’s answer: the address saved is what is in the form when you save — what you typed, the suggestion you picked (as shown, if you save before its check comes back), the version Google confirmed for it, or Google’s version if you chose “Use this”.

Who processes your data

Haptco relies on a small number of service providers, each receiving only what it needs to do its job:

  • Supabase — database, login, file storage, and the functions that run the AI and email features.
  • Anthropic — the AI processing described above.
  • Resend — sending the notification, applicant, and vendor emails described above.
  • Vercel — hosting the Haptco website, and the page-view and action statistics described below.

Page-view and action statistics

Haptco counts page views, so we can tell which pages people actually reach. This is Vercel Web Analytics, part of the hosting Haptco already runs on. It sets no cookies and stores nothing on your device, and it runs on haptco.com itself rather than through an outside tracking network — though Vercel, as our host, receives and keeps the counts.

For each page view, Vercel records the time, which page it was, the page you arrived from, an approximate location worked out from your internet connection (roughly the city), your browser and operating system, and whether you are on a phone, tablet, or desktop. Vercel reports this back to us as totals rather than as a record of any one person, and states that visitors are counted using a short-lived code derived from the request that resets every 24 hours — so a visitor is not recognised from one day to the next, and is not followed to any other website. Automated traffic is excluded.

Alongside page views, Haptco counts thirty actions. Two tell us whether the landing page is useful: that an account was created, recorded as one of two counts depending on whether a spreadsheet summary saved by an earlier version of the landing page was still in your browser. Twenty-eight tell us whether a new landlord gets set up. They are counted only during an account's first two weeks, and normally once for an account in a given browser — a browser that does not keep its note of what was already sent, or two tabs open at the same moment, can send one again. They are: that a first property and a first tenant were added, and that a first month of rent was marked paid or part-paid, including by a spreadsheet import; that the form for adding a tenant was opened; that saving that form was stopped by a check on the form, recorded as one of five counts naming only which entry — the tenant's name, the lease start, the rent, the unit, or something else, such as the property, or a form that had not finished loading — never what was typed; that the form for a first tenant was put off with its Not now button, recorded as one of four counts naming only the reason picked — the lease details are not to hand, the unit is empty, just looking around, or no reason given; that the same form's link offering to list an empty unit instead was followed; that the Reports page was opened; that a spreadsheet import was started, reached its review, or completed, or stopped before its review, recorded as one of four counts naming only why: the file was refused or could not be opened, nothing in it could be read, the day's reading limit had been reached, or something unrelated to the file got in the way, such as a lost connection; that a lease uploaded on the form for adding a tenant filled in at least one box, had nothing new to fill in, could not be read, was too big to read, or stopped for another reason, such as a file it cannot read, the day's reading limit, or a lost connection, recorded as one of five counts naming only how it ended; and that a lease it read was removed from that form again. Each of these sends a short label naming the action, and the landing-page actions also send, if you followed a link we posted somewhere, one further word naming where that link was — chosen from a short fixed list we maintain, such as a forum or a landlord association. Nothing else is sent. No part of your spreadsheet is included in any of these counts — no file name, no amounts, no addresses, and no tenant details. Nor is any part of a lease you upload: not its file name, and nothing written in it. The word naming the link is the same for everyone who arrives that way, so it cannot tell you apart from anybody else, and it is not stored on your device or remembered after you close the tab.

Tenant portal links, the private shareable link for a listing, vendor quote links, and the link at the foot of Haptco’s emails that stops them are left out of this counting entirely, and the web address is trimmed to the page itself before anything is sent — so the private part of a link is never included. A published listing also has an ordinary public page, which carries no private link and is counted like any other public page on the site. This applies to the thirty action counts as well.

On the public pages only — the home page, this policy, the terms, and the sign-in page — Haptco also runs Google's advertising tag, so we can tell which adverts bring people here. This one is different from the counting above in two ways you should know about: it belongs to Google rather than to our host, and it does set cookies. It is not loaded anywhere inside the app. It does not run on any page showing your properties, tenants, or payments; it does not run on tenant portal, listing, or vendor quote links, or on the link that stops Haptco’s emails; it is not loaded at all when you arrive already signed in; and it is not loaded on a sign-in page whose web address names a page of the app to go on to once you have signed in. When you sign in on a public page where the tag has loaded — with a password, with Google, or by following an emailed sign-in or password-reset link — that page is replaced by a fresh one, and the app opens there without the tag. If you have just created an account, the page first finishes sending the sign-up signal described below, which takes no more than a few seconds. On the public pages where it does run, this shares information about you with Google for advertising measurement: the address of the page, your IP address, the cookie Google sets in your browser, the advert-click identifier if you arrived from an advert, and the same details your browser gives any website you visit. If you create an account on a sign-in page where the tag runs, Google is also told that an account was created, so we can tell which adverts actually lead to sign-ups rather than only to visits. That signal is sent at the moment you submit the form. It carries no part of your email address, no name, and nothing you later put into Haptco — and Google's "enhanced conversions" features, which would attach a scrambled form of the address you typed, are all turned off for this account. It is not sent if you only sign in, and it is not sent from anywhere inside the app.

Correction, 17 August 2026: between 13 August 2026, when the advertising tag was added, and this date, the paragraph above said that signal carried nothing about the account, including no part of your email address. That was wrong. Google's "enhanced conversions" features — there is more than one, and Google lists them as separate settings — are switched on by default when the tag is configured, and while they were on, a scrambled (hashed) form of the address typed into the sign-up form could be sent to Google together with that signal. They have all now been turned off, and the paragraph above describes what is sent.

Correction, 13 September 2026: from 13 August 2026, when the advertising tag was added, until this date, the paragraph above said the tag did not run once you were signed in, and the next section says it is limited to the public pages. Neither was true of a sign-in made on one of those pages. The app then opened inside that same page, where the tag was still loaded, so until the page was closed or reloaded Google went on receiving the details listed above for each page you opened in the app: the address of that page, such as the expenses or reports page, and of the page before it, together with your IP address and Google's cookie. A few of those addresses include an internal reference number, or the public address of a listing you had published. Google did not receive what those pages showed or anything you typed into them — no property, tenant, or payment details. Signing in now replaces any page the tag had loaded in, and the paragraph above describes what happens.

Haptco also runs Microsoft Advertising's tag, for the same reason and under the same rules as Google's: only on the public pages listed above, and never inside the app; not on tenant portal, listing, or vendor quote links, or on the link that stops Haptco’s emails; not when you arrive already signed in, or on a sign-in page whose web address names a page of the app to go on to; and when you sign in on a page where it has loaded, that page is replaced in the same way. It also waits while the web address still carries the sign-in details that a Google sign-in or an emailed link brings back with it, and loads only once those have been cleared from the address. It belongs to Microsoft, and it sets cookies: _uetsid and _uetvid on haptco.com, and _uetmsclkid if you arrived from a Microsoft advert, with copies of these identifiers kept in your browser's storage. It may also set Microsoft's own MUID cookie, which a browser that blocks third-party cookies does not allow. Where it runs, Microsoft receives a page view for the public page you arrive on — its address and the page you came from — together with your IP address, those cookies, the advert-click identifier if you arrived from a Microsoft advert, and the same details your browser gives any website you visit; it is also sent a short signal when you leave that page, or come back to it with your browser's Back button, and is told nothing as you move between pages after that. If you create an account on a sign-in page where it runs, Microsoft is also told, anonymously, that an account was created, at the same moment as Google: that signal carries no part of your email address, no name, no account details, and nothing you later put into Haptco, and Microsoft's enhanced conversions is turned off for this account. It is not sent if you only sign in.

What Haptco does not do

Two different things are worth keeping apart here, because a single sentence covering both would read as a bigger promise than we can make. On the public marketing pages, the advertising tags described above do share information about visitors with Google and Microsoft, and that is sharing for advertising. It is limited to those pages.

What is never shared for advertising, and never sold, is what you put into Haptco: your account, your properties, your tenants, and your payments do not reach Microsoft or any advertising network. They reach Google only in these ways: a property address you type, for address suggestions and the address check; a property’s postal code, or its town and state, when you click the link that searches Google Maps for a contractor; your email address when Neal writes to you himself from Gmail; and, if you sign in with Google, that your Google account signed in to Haptco. Neither tag is loaded inside the app, so no page showing those records is measured by an advertising network, and neither is present on a tenant portal, listing, or vendor quote link, or on the link that stops Haptco’s emails. There is no Google Analytics and there is no session-recording tool — nothing watches what you type or replays your screen. Inside the app, alongside the page-view and action counting described above, Haptco keeps three small records of its own, in its own database rather than with any outside service: when your account last opened Haptco and how many times it has been opened; the advert-click identifier and campaign labels from the web address you first arrived on, if you arrived from an advert; and a dated note that a property or tenant was deleted. That last note records only that a deletion happened, the date, which kind of record it was, and an internal reference to it — never the name, the address, the amounts, or anything you had typed into it. These three are kept even if you later delete your account, because their whole purpose is to record what happened before that. None of the three is shared with Google or any advertising network, and the records you enter are not used to build products for anyone else.

Information kept on your device

Your browser stores a few small items so the app works smoothly: your light or dark theme choice, your onboarding progress (including a note of which of the one-time action counts above were already sent, so each is normally counted only once), minor form conveniences, the page you were heading to before you signed in, a draft of the property details you type in when you add a property (so your setup carries over into the next screen), a short summary of a spreadsheet dropped on an earlier version of the landing page, if one is still there, a brief note that you started signing in with Google or an email sign-in link, a note of the advert you arrived from if you arrived from one, and — if you use the assistant — your recent conversation with it. The advert note holds the advert’s own identifier and campaign labels and the name of the page you landed on, never the rest of the web address; it stays in your browser until you create an account or until you clear your browsing data, and is removed as soon as it has been recorded. Your login session is also kept in your browser so you stay signed in.

The spreadsheet summary is what an earlier version of the landing page showed you about a file you dropped there — how many properties and units it appeared to cover, the months it spanned, and the total it showed — so that /import can offer to carry it over. If you dropped a file there before creating an account, the file itself is also kept in your browser’s local storage — never uploaded, and never leaving your browser — so that /import can bring it in after you sign up; the file is removed when you open the importer after signing in, and the summary once an import adds something to your account. Dismissing the reminder about them on your dashboard removes both; otherwise they stay until you clear your browsing data. The landing page no longer offers this, so nothing new is stored this way.

The assistant conversation is kept only in the browser tab you are using — up to the last forty messages, and fewer when they are long, because the space set aside for it is small — so it survives a page reload. It is cleared when you sign out, and it is never restored under a different account. When the assistant proposes an action for you to approve, that proposal is not stored.

Haptco can be installed as an app and opened offline. Apart from the items listed above, it only saves the app’s screens for offline use — your books, your ledger and your reports are not downloaded to your device.

Keeping and deleting your data

Haptco keeps your data for as long as your account is active. You can edit or delete your records inside the app at any time, including individual properties, tenants, documents, and expenses; when you delete a record, it is removed from your books — most records are erased from the live database immediately, and some (like expenses) are permanently flagged as deleted and excluded from your books and reports. Deleting a property or a tenant leaves behind a dated note that the deletion happened, so that a record vanishing is never mistaken for one that was never there; the note holds an internal reference to the record and nothing else from it — no name, no address, no amounts, and nothing you had typed in. If you ask us to delete your whole account, that note stays, as do the record of when the account last opened Haptco and the note of the advert it arrived from, because each of them exists to record what happened rather than what you own. You can also print or export reports, such as the owner statement and the Schedule E summary.

To request a copy of all your data, or to delete your entire account and everything in it, email support@haptco.com and we will take care of it.

Children

Haptco is a tool for running a rental business and is not intended for children. We do not knowingly collect information from children.

Changes to this policy

If we make a meaningful change, we will update this page and the date at the top.

Contact

Questions about privacy? Email us.

support@haptco.com