Kalven Privacy Policy
Kalven is a Chrome extension for commercial real estate (CRE) brokers. It assists with property prospecting, prioritization, and workbook generation. This policy describes what data Kalven collects, how it is stored, and where it is sent.
What Kalven Does
Kalven runs inside your existing authenticated CoStar and TitlePro247 browser sessions. It reads property data from web pages you are already logged into, sends that data through Kalven's analysis service to Anthropic's Claude API for structured analysis, and generates a downloadable Excel workbook with property prioritization and outreach recommendations. Kalven provides the analysis under its own Anthropic account; you do not need an Anthropic API key.
Kalven is a CRE prospecting and prioritization tool. It does not provide lending recommendations, credit decisions, property appraisals, or investment advice.
Data Stored Locally
Kalven stores the following data in your browser using Chrome's built-in extension storage:
- Broker profile and report settings: the name, firm, and specialty you enter, and your report format and column choices, are stored in
chrome.storage.local, scoped to the Kalven account you are signed in with. They stay on this computer when you sign out. Earlier versions of Kalven also stored an Anthropic API key here; Kalven deletes any stored key when it updates. - UI preferences: city, state, asset type, and filter settings you enter for the current session are stored in
chrome.storage.session(ephemeral; cleared automatically when you close your browser). - Recent Runs metadata (local): a local IndexedDB database (
kalven_history) records operational metadata about your prospecting runs so you can see recent activity and resume an unfinished run. Records include run and batch identifiers, timestamps, counts (analyzed, processed, error), enumerated status and error codes, the broker profile snapshot you entered (your name, firm, specialty), the workbook filename Kalven chose, and the filter settings you typed into the popup for that run (city, state, asset type, ranges, checkbox selections). The filter-settings copy exists solely so you can click Continue and resume a run that hit Kalven's per-run cap; it is never used for any other purpose. Records are scoped to the Kalven account signed in when they were created. All fields listed here remain on your device: recipes, filenames, statuses, error codes, and profile snapshot are not sent to Kalven's backend, are not synced across devices, and are not shared with any third party. The one narrow exception, called out separately below, is a per-workbook usage summary sent to Kalven after a workbook download completes. Records persist until the extension's storage is cleared (via Chrome's extension controls or by uninstalling Kalven); a self-serve delete-per-run control is not yet available. - Selector schemas and page structure metadata: cached in
chrome.storage.sessionfor internal selector resolution. These contain only structural information about page layout (tag names, attributes, element positions). They never contain property data, contact data, or loan data. - Account session and entitlement tokens: when you sign in to a Kalven subscription, a short-lived signed entitlement token and account session metadata (your sign-in email, subscription status, renewal date) are stored in
chrome.storage.localalongside your profile. These identify your subscription; they contain no property, contact, or loan data.
Property data, contact data, and financial data extracted from CoStar and TitlePro247 pages are held only in browser memory during your active session. They are never written to persistent storage (including the Recent Runs database), never synced, and never cached between sessions.
Data Sent Externally
Kalven sends data to the following services, each for a distinct and limited purpose:
- Kalven analysis service (
https://api.kalven.ai/inference/messages): extracted property, financial, and contact data is sent over HTTPS for AI-powered analysis. Kalven's server forwards each request to Anthropic's Claude API under Kalven's own account and returns the result. The content passes through in transit only and is never stored. See "Analysis Requests" below. - Kalven backend (
api.kalven.ai): account, billing, entitlement, and operational usage metadata: your sign-in email, subscription state, entitlement-token requests, and one per-workbook usage summary (see below). See "Account and Subscription Data" below for exactly what this service does and does not receive. - Stripe (
api.stripe.com, via Stripe Checkout and the Stripe Billing Portal): payment processing for your subscription. Your card details are entered on and held by Stripe; Kalven never sees, stores, or transmits card numbers. - Resend (transactional email API): used solely to deliver one-use sign-in links and codes to the email address you provide.
Kalven does not send data to any advertising network, analytics service, or data broker, and does not collect crash reports. Beyond the analysis requests described next, the one exception is the per-workbook usage summary described in "Operational Usage Reporting."
Analysis Requests
To analyze a property, the extension sends the extracted page content and Kalven's analysis instructions (which include the name, firm, and specialty from your broker profile) to Kalven's analysis service, together with a random request identifier and the opaque Kalven account identifier. Kalven's server checks that you are signed in and subscribed and that your account is within its daily usage limits, attaches Kalven's Anthropic credential, forwards the request to Anthropic, and returns Anthropic's response to the extension.
The content of these requests and responses exists on Kalven's server only in memory while the request is in progress. Kalven never stores, logs, caches, queues, or traces it, never uses it for any other purpose, and never sends it anywhere except to Anthropic. Kalven does not use it to train any model.
For each analysis request, Kalven keeps an accounting record so it can apply usage limits and pay for the service: the request identifier, the opaque account identifier, the type of analysis step, the model used, an outcome status, the date in your pinned timezone, the estimated and actual cost, token counts, and timestamps. These records contain no property, contact, loan, filter, or profile content, and are deleted after 90 days.
Each Kalven account has daily usage limits (a spending limit, a request limit, and a limit on simultaneous requests). When a limit is reached, further analysis is refused until the next day in your pinned timezone; properties already completed in that run are still delivered.
Operational Usage Reporting
After a workbook download completes, Kalven sends its backend an operational usage summary containing a random event identifier, the opaque Kalven account identifier, the number of properties processed in that batch, and whether the batch was an initial run or a continuation. The backend records when it receives the summary. Kalven uses these summaries for account usage reporting, service administration, and plan-limit administration. These summaries never contain property identifiers or addresses, owner, contact, loan, or other platform-derived data, filter selections, workbook contents, or analysis prompts or responses. Raw event summaries are retained for 90 days. Kalven also derives per-broker daily aggregates (retained for 13 months) and anonymized cross-broker monthly totals (retained indefinitely as service growth metrics). Anonymized monthly totals contain no per-broker identifier. Months with fewer than five active brokers are excluded from the anonymized monthly table. Authorized internal dashboards are provided through Retool using limited read-only access. Delivery is default-on once you accept the current Terms of Service; delivery is best-effort and the extension will not block your workbook download or Recent Runs update if a summary fails to send.
Account and Subscription Data
The Kalven backend handles only account, billing, entitlement, and operational metadata: sign-in email, Stripe customer/subscription/invoice identifiers and lifecycle state, renewal or billing dates, signed-token issuance/expiry metadata, the per-workbook usage summary described above (event identifier, opaque account identifier, processed-property count, run kind), and ordinary request/webhook logs such as timestamps, IP addresses, user agents, webhook event IDs, and error traces. Apart from relaying analysis requests in memory as described in "Analysis Requests," it never receives, stores, logs, or transmits broker deal data, property identifiers or addresses, owner/contact data, loan data, platform-derived records, filter selections, analysis prompts/responses, generated reports, or Excel files.
The extension fetches an entitlement token when the popup opens or reopens, and again when you press Refresh; at those times it also tops the token up if less than two hours remain on it. It does not refresh the token in the background while the popup sits open. Before a run starts, Kalven also sends a short request to its backend to verify your daily run allowance under your plan's run limit; this request transmits a random event identifier, the opaque Kalven account identifier, and your IANA timezone string (for example, "America/Chicago"). The backend records the request time, the number of runs you have completed today under your pinned timezone, and (on your first use) stores that pinned timezone so your daily reset time stays stable across sessions. The allowance request never transmits property, owner, contact, loan, or filter data, analysis prompts or responses, or workbook contents. The token's expiry is also re-checked locally with no network request, and the cached token is used until it expires; after that a run is blocked until you reopen the popup or press Refresh. When a token is fetched or refreshed, the backend learns that an entitlement check happened at that time. It does not learn what property, platform, count, prompt, response, or report was involved. The workbook-completion usage summary is a separate, narrow signal described in "Operational Usage Reporting" above and does not include any of that content.
So you can see your remaining daily downloads at a glance, the extension also issues a read-only status request to the backend whenever the sidebar's identity changes (sign-in, sign-out, account switch, delivery completion). This request transmits the opaque Kalven account identifier and your IANA timezone string, and the backend responds with the current count of downloads you have completed today under your pinned timezone, the daily cap, and the next reset time. The status request is read-only; it never writes to the daily-allowance records or the pinned-timezone store, is never cached by shared infrastructure (Cache-Control: private, no-store), and never transmits property, owner, contact, loan, or filter data, analysis prompts or responses, or workbook contents. The status response is display-only; the separate allowance request described above remains the sole authority that permits or blocks a run.
Daily-allowance records (random event identifier, opaque account identifier, download date in your pinned timezone, received-at timestamp) are retained for 90 days and then purged. Your pinned IANA timezone is retained for the lifetime of your Kalven account and deleted when the account is deleted.
Sub-processors: Anthropic (AI analysis of the requests Kalven relays, under Kalven's account), Vercel (hosting of the Kalven backend and analysis service, and database for account/billing/entitlement/usage-summary/analysis-accounting metadata), Stripe (billing), Resend (sign-in email delivery), and Retool (authorized internal dashboards over account, subscription, and usage-summary query results via a limited read-only database role).
Data Generated Locally
Excel workbooks (.xlsx) are generated entirely within your browser using the ExcelJS library and saved to your Downloads folder via the Chrome downloads API. No workbook data leaves your browser.
Permissions
Kalven requests the following Chrome permissions:
| Permission | Purpose |
|---|---|
| tabs | Navigate and read CoStar and TitlePro247 tabs during analysis |
| storage | Store your broker profile, report settings, and UI preferences locally |
| scripting | Execute extraction scripts on CoStar and TitlePro247 pages |
| sidePanel | Display the Kalven interface as a Chrome side panel |
| downloads | Save generated Excel workbooks to your Downloads folder |
| alarms | Keep the background service worker active during long batch analysis runs |
| tabGroups | Group platform tabs under a "Kalven" label for organization |
| webNavigation | Recognize the TitlePro247 report tab that opens during a run so the report link is attached to the right property |
Kalven also requests host permissions for product.costar.com, www.titlepro247.com, app.reonomy.com, and api.kalven.ai to operate within your authenticated sessions, send analysis requests, and check your subscription status.
Your Responsibilities
- You must comply with CoStar's and TitlePro247's respective terms of service.
- Kalven does not independently access CoStar or TitlePro247. It operates exclusively within your own authenticated browser sessions using your own credentials. Kalven does not store your platform login credentials.
Email templates and outreach
Kalven includes an optional "Email Your Prospects" flow that opens draft messages in your own Microsoft Outlook mail service after a session completes.
- Templates persist locally. Email templates you save (name, subject line, body with
{{token}}placeholders) are stored only in your browser'schrome.storage.local, scoped to your Kalven account. Templates contain only broker-authored copy; they never contain resolved contact names, email addresses, or property data. - Contact data and draft content are transient. The recipient list, resolved email body (with real names and addresses substituted into tokens), and in-progress edits exist only in memory for the duration of the outreach session. Closing the Kalven side panel discards all of them.
- Mail service handoff. Clicking "Open draft in Outlook" opens a compose URL in a new tab. Microsoft Outlook receives the recipient list, subject, and body in that URL as query-string parameters. Your use of Outlook is governed by Microsoft's privacy terms, not by this policy. Kalven does not send your drafts to any Kalven-controlled server.
- No telemetry on drafts. Kalven does not record, transmit, or log the content of any outreach draft. The resolved contact names, email addresses, and body text never leave your browser except via the mail-provider URL opened in your new tab.
Data Retention
Kalven retains no property, contact, or financial data after your browser session ends, and its analysis service retains none at all. Analysis accounting records are deleted after 90 days. Your broker profile and report settings persist in local storage until you uninstall the extension. Email templates (broker-authored copy only) persist locally until you delete them or uninstall the extension. UI preferences are cleared automatically when you close your browser.
Changes to This Policy
If this policy changes, the updated version will be posted at this URL with a revised "Last Updated" date.
Contact
For questions about this privacy policy, contact: joe@kalven.ai