Legal
Privacy Policy
Last updated September 12, 2026
The short version
- We don’t sell your data, and we don’t run ads.
- We set four cookies, all tied to signing you in — none for advertising or cross-site tracking.
- We don’t store Social Security Numbers — not as a policy, but as a rule enforced by an automated check on every code change.
- Your clients never create an account. They get single-purpose, expiring links instead.
- Your rates and income never appear on any public or peer-facing page — that’s enforced in the code that builds those pages, not a setting you have to remember to toggle.
- Your portfolio page is public and search engines index it. Your email address is not on it unless you switch it on.
- Three vendors touch your data to run the product: Fly (hosting, database), Resend (email) and Stripe (online payments, only if you connect a Stripe account). A fourth, Anthropic, sees redacted text only, and only if you turn on AI-assisted import.
- Export everything, in full, any time, from inside the app.
What we collect
Account and sign-in
Your name, email address (you can attach more than one and mark which is primary), and however you choose to sign in: a password (stored as a salted, one-way hash — we never see or store it in plain text), a passkey, or a magic-link email. If you turn on two-factor authentication, we store your TOTP secret and backup codes, both encrypted. We keep a record of your active sessions and devices so you can review and revoke them, and we log the IP address behind security-relevant events, like a sign-in, for audit purposes.
Cookies
Free-Lance sets four cookies, all four tied to signing you in and none of them for advertising or cross-site tracking: a session cookie; a short-lived two-factor challenge cookie, present only for the few minutes a sign-in is waiting on your authenticator code; an optional “remember this device” cookie, set only if you choose that option at sign-in; and a short-lived challenge cookie set only while you register or sign in with a passkey. We don’t set any cookie beyond these four.
Profile
Whatever you choose to add: a bio, your general location or market, the roles you work (camera operator, gaffer, and so on), your education — school, degree, graduation year, which appears on your résumé and affects nothing about what your account can do — a headshot, and how you want to be paid: a payee name, address, and instructions you write yourself, shown on your invoices. That’s text you compose. It isn’t a connection to a bank account.
The business records you create
Clients and contacts, rate rules, bookings, jobs, daily logs (in/out times, mileage, expenses, notes — including ones logged on your phone with no signal, which sync once you’re back in range), invoices and estimates, and payments you record by hand: the method (check, Zelle, wire, cash, and so on) and the amount. That’s you telling the app you got paid — not the app processing a payment; see Payments, today below. Also anything you upload as media (images, video links) and the visibility you set on it, and any calendar blocks you add.
Documents you upload
Two different paths, handled two different ways:
- W-9s, in Settings → Documents, are encrypted before they ever touch storage — a fresh key per file, wrapped by a master key we hold separately — and never parsed. There is no field in our database shaped like a Social Security Number or tax ID, anywhere, for anyone’s W-9. Reading or sending a stored W-9 requires you to re-prove your two-factor code first, and every access is logged.
- Imported documents — old invoices, résumés, CVs, spreadsheets — go through a separate tool meant to turn your history into usable records. The original file is stored privately, exactly as you uploaded it, so it’s always yours to re-download or export. Before any text from it is turned into a client, job, or invoice in the app — or sent to Anthropic, if you’ve turned on AI-assisted extraction — we strip anything shaped like a Social Security Number, ITIN, EIN, bank account number, or routing number out of that extracted text. A file that looks like a W-9 or other tax form is refused by this tool outright and pointed at the encrypted vault above instead. AI-assisted extraction is off by default; with it off, extraction runs entirely on our own server. Either way, this only ever reads text — a scanned or photographed document has no text layer to redact, so those aren’t read yet.
What other people enter about your work
If someone submits an inquiry through your public booking page, we store what they typed — name, contact info, job details — so it reaches you as a booking request. If you send a client a link to view or pay an invoice, or view an estimate, they can act on it without ever creating an account; the link itself is a single-purpose, expiring token, and we only ever store a one-way hash of it, never the working link itself, so even we can’t reconstruct it after it’s issued.
Security records
Sign-ins, W-9 access, exports, and similar security-relevant actions are kept in an append-only log we use to investigate account issues and abuse. It’s never edited after the fact.
What we don’t collect
No Social Security Numbers, ever — not as a form field, not as a database column, anywhere. That’s enforced by an automated check on every code change, not just a policy on paper. No card or bank account numbers either: they’re stripped out of anything you import before it’s saved (see above), and online payments run on Stripe’s hosted checkout, so a client’s card or bank number is entered on Stripe’s page and never reaches Free-Lance’s servers (see Payments below). And no reading of scanned or photographed documents — only text-based files.
Money stays private
Your rates and income are never shown on any public page, and never shown to other freelancers on the platform. This isn’t a setting you could accidentally leave off — it’s enforced in the code that builds those pages: the function that generates your public booking page only ever includes your name, roles, bio, headshot, location, and which dates you’re busy or free. It has no path to your rates, your clients, or your job details, and an automated test fails the build if that ever changes.
Your public portfolio site
Free-Lance publishes a portfolio page for you. It’s reachable at two addresses — free-lance.app/u/{your-name}, and {your-name}.free-lance.me, a second domain we run specifically for user-published pages so that what freelancers publish and what the product itself does stay separated.
This page is genuinely public. Unlike the links you send clients — invoices, estimates, résumés, which we explicitly tell search engines not to index — your portfolio page is meant to be found. Search engines crawl it, and anything on it can be copied by anyone who visits, including scrapers. Treat it as a public page, because it is one.
What appears on it:
- Your name, headline, roles, general location, bio, and headshot.
- Only the portfolio items you’ve marked as client-visible — never your whole media library.
- Your credits, from the same money-free read model your résumé uses.
- Your availability as busy or free dates only — never the job titles, never the client names, never what the work was.
- A contact form, so someone can actually hire you. That section can be restyled or collapsed, but not removed.
Your email address is not published unless you turn it on. It’s off by default, and that’s deliberate: a résumé goes to one named producer, but a website is read by every scraper on the internet. If you switch it on, expect it to be harvested.
Your rates and income never appear here, on any template, ever — the same enforcement described under Money stays private above, which is code and a build-failing test rather than a setting.
If any of the AI-assisted writing features are used to draft your page, nothing generated is published until you’ve looked at it and accepted it. And if you want the page gone, email support@free-lance.app — the same address as everything else here.
If you’re a client, not a freelancer
You may have landed here from a freelancer’s portfolio page, or from a link to an invoice, estimate or résumé they sent you. You don’t have a Free-Lance account, you don’t need one, and we’re not going to make you get one.
If you fill in a freelancer’s inquiry form — your name, email, optional phone and company, and the details of the job you’re asking about — that goes to that freelancer, as an inquiry in their account. They are the person who decides what to do with it and how long to keep it, in the same way as if you had emailed them. We store it so we can show it to them. We also record the IP address the form was sent from, in that freelancer’s security log, so abuse of their inquiry form can be investigated. We don’t use any of it to market anything to you, we don’t sell it, and we don’t add you to any list.
If you were sent a document link, that link is unguessable, single-purpose, expiring, and can be revoked by the freelancer at any time. We tell search engines not to index those pages. Approving an estimate records the name you type and the time, and sends it to the freelancer — that’s the point of the button. Paying an invoice online happens on Stripe’s checkout page, on the freelancer’s own Stripe account: your card or bank details go to Stripe, not to us, and we receive only the outcome and the email address Stripe uses for your receipt (see Payments above).
To correct or delete something you sent a freelancer, the fastest route is to ask them directly, since it’s their record. You can also email support@free-lance.app and we’ll help.
Payments
Online payments are optional and run through Stripe. If you connect a Stripe account, you complete Stripe’s own onboarding on Stripe’s site: the identity details and the bank account for payouts go to Stripe, not to us. We store your Stripe account ID and whether charges and payouts are enabled on it, nothing more from that form.
When a client pays an invoice online, the charge is made directly on your connected Stripe account — you are the merchant, not Free-Lance — through Stripe’s hosted checkout page. The client enters their card or bank details on Stripe’s page; those numbers never reach our servers. Stripe tells us the outcome (amount, rail, status, its own reference IDs) and we keep that record, including the raw event Stripe sent, so a payment that looks missing can be traced. We pass the client’s email address to Stripe so it can send a receipt.
You can also record payments received some other way — check, Zelle, wire, cash — by hand, so your invoices and year-end numbers stay accurate. Stripe’s handling of the data it collects is covered by Stripe’s own privacy policy.
Who else sees your data
Three vendors run the infrastructure behind Free-Lance:
- Fly.io hosts the application and the database. The database sits on Fly’s private network, not reachable from the public internet.
- Resend sends the emails Free-Lance sends on your behalf — sign-in links, password resets, invoice and estimate emails, payment reminders.
- Stripe processes online payments on your connected account and pays you out, if you connect one. Stripe receives what you give it during onboarding and what a client enters at checkout; we receive the outcome (see Payments above).
A fourth only comes into play if you turn it on:
- Anthropic processes redacted document text if you enable AI-assisted import (see What we collect above). It’s off by default. When it’s on, Anthropic sees text with tax IDs and bank numbers already stripped out — never the original file, never an image, never your account credentials.
Nobody else. We don’t run ads, we don’t use third-party analytics or tracking scripts on this product today, and we don’t sell or rent your data to anyone.
Your controls
Export
Every entity you create — clients, jobs, daily logs, invoices, payments, bookings, and more — can be exported as CSV or JSON at any time from inside the app. A full-account export bundles everything into one JSON file, which can also be re-imported, so your data is never trapped here by file format.
Correction
Edit anything directly in the app — there’s no separate request process for fixing your own data.
Deletion
Free-Lance is early enough that there isn’t a self-serve “delete my account” button yet. Email support@free-lance.app and we’ll delete your account and the data tied to it directly. One narrow exception: security log entries (see Security records above) stay on file with the account reference removed rather than the row itself deleted — the same way a sign-in record behaves if an account is ever removed at the database level. That’s a deliberate security-integrity choice, not an oversight.
Two-factor / step-up
If you enable TOTP, viewing or sending a stored W-9, or changing how you get paid, requires a fresh code within the last few minutes — not just an active session.
Data retention
We keep your data while your account is active. Client-facing links expire on their own — 180 days for an invoice or estimate view link, refreshed automatically if you resend it, 72 hours for a W-9 download link — and can be revoked outright at any time; voiding an invoice revokes its link. Imported originals stay until you delete that import batch. Security log entries are kept indefinitely for audit purposes, in the anonymized form described under Deletion above.
Children’s privacy
Free-Lance isn’t directed at children, and we don’t knowingly collect information from anyone under 13.
Where your data lives
Your data is hosted on Fly.io’s infrastructure. We haven’t yet formalized a policy for international users or specific regional data residency — if that matters for you, ask before you rely on this product for it.
Changes to this policy
We’ll update the date at the top whenever this changes. A change significant enough to matter — like turning on card payments, or adding a new vendor — gets called out here, not just silently folded into a date bump.
Contact
support@free-lance.app. Free-Lance is operated by Dan Jacobs.