Privacy Policy
What Curtains and curtains.app collect, what they never collect, and the choices you have.
On this page
The short version
- Your screen never leaves your Mac. Curtains puts the windows you pick on one canvas in memory. Nothing is recorded, uploaded or saved to disk, and we never see it.
- The app asks the internet for three things, each with its own switch: the update check, anonymous usage stats and, only if you turn it on, automatic pass renewal.
- Usage stats are anonymous. They say which features you use, never what’s on your screen, under a random ID that isn’t linked to you. In the EU, the UK and Switzerland they stay off unless you say yes.
- Your account is an email address. We keep your purchases, your team and your devices (a scrambled ID and the device’s name). No passwords, no IP addresses, no screen content.
- Stripe sells and bills paid plans. Your card details go to Stripe, never to us.
- You can delete your account on curtains.app at any time, and ask us for a copy of what we hold.
Who we are
Curtains is made by Miscreants, LLC, a limited liability company organized in New York. In this policy “we” and “us” mean Miscreants, LLC. We are the controller of the personal data described here.
- Address: 418 Broadway, Ste N, Albany, NY 12207
- Privacy questions and requests: privacy@curtains.app
- Representative in the EU and the UK: None appointed. Contact us directly at privacy@curtains.app.
What this policy covers
This policy covers:
- The Curtains app for macOS (and Windows, when it ships).
- curtains.app, including the pages where you sign in, buy, activate a device and manage your account.
- The account server at api.curtains.app that those pages use.
It doesn’t cover the meeting apps you share Curtains in, such as Zoom, Google Meet or Microsoft Teams. What you share there is handled under their privacy policies.
What stays on your device
Most of what Curtains does never leaves your computer.
- Your screen. Curtains captures only the windows you pick, puts them on the canvas in memory and shows that canvas in the Curtains Presenter window. Frames are never written to disk and never sent to us. Your meeting app captures the Presenter window like any other window, under its own policy.
- Window thumbnails in Studio’s Sources list are made on your device and shown only to you. Apps you hide get no thumbnail unless you open the Hidden section.
- Ink, blur and window titles. Drawings, blurred areas and window titles stay on your device. Window titles are off the canvas unless you turn them on.
- Call detection. Curtains asks macOS whether the microphone or a camera is in use and by which app, and matches window titles in memory, so it can tell when you’re on a call. It never records audio or video, never stores or sends what it finds, and needs no extra permission.
- Your settings, combos, themes and hidden apps are saved in Curtains’ settings folder. Background images and overlays you choose for a custom theme are copied there as clean PNG files, without their metadata.
- Your pass and trial start date are kept in the macOS keychain.
What the app sends, and when
The Curtains app makes three kinds of request. Each one has its own switch in Settings › Privacy & updates. With all three off, the app makes no requests at all. It never sends crash reports.
The update check
On launch and once a day, Curtains downloads a small file that lists the latest version, from updates.curtains.app. The request sends nothing about you, your screen or your windows, beyond what any download carries (your IP address and the updater’s standard user agent, which our host Cloudflare sees). Turn off Check for updates and no check runs unless you press Check now.
Anonymous usage stats
Usage stats tell us which features people use, so we know what to improve. They’re sent to PostHog, in the United States.
- When they’re on. Curtains asks you the first time you open it, and sends nothing before you answer. If your Mac’s region is set to a country in the EU or EEA, the UK or Switzerland, or the region is unknown, the box starts unchecked and nothing is ever sent unless you check it. Everywhere else it starts checked, and you can uncheck it. The region comes from your system settings, never from your location, and is never sent.
- Turning them off. Turn off Share anonymous usage stats in Settings › Privacy & updates at any time. Collection stops at once, anything waiting to be sent is thrown away and the install ID is deleted.
- The install ID. Events are sent under a random install ID made on your device. It isn’t your device ID, and it isn’t linked to your email, account or passes. Reset ID replaces it with a new one.
- No IP addresses in the stats. Like any web request, sending usage stats shows PostHog your IP address. Every event tells PostHog not to record it or look up your location, and not to build a profile from the install ID.
Every event carries the Curtains version, the operating system and its version (like 15.5), the processor type, your plan, and the language of your system (like en, not your region). The events are:
| Event | What it says |
|---|---|
app_launched |
Curtains started. |
onboarding_step, onboarding_completed |
Which first-run step you reached. |
permission_granted, permission_denied |
Whether Screen Recording or Accessibility was allowed. |
draft_started, went_live, paused |
You started a draft, went Live, or paused. |
session_ended |
How long it lasted (rounded to a range: under 1 minute, 1 to 5, 5 to 15, 15 to 60, over 60), the most windows at once (1, 2, 3 or 4 to 6) and the layout. |
layout_changed |
Which layout you switched to. |
window_added |
That a window was added, and how: picked, Prepare (added blurred) or a combo. |
feature_used |
Which tool you used, at most once per session: blur, pen, highlighter, arrow, laser, Fit all windows, auto-fit, Bring to front, hiding an app, combos, theme, Follow, the floating remote, or which shortcut. |
call_detected |
That a call started, and the kind of app only: Zoom, Meet, Teams, Slack, Webex, Discord, FaceTime or other. |
upgrade_clicked |
Where you pressed Upgrade. |
pass_activated |
That a pass was activated, and its plan. |
update_installed |
The version you updated from and to. |
error |
The kind of error an action hit, never its message. |
Usage stats never include window titles, the names of the apps you share, file names, links, screen content, ink, your email, your pass or device ID. Every value is picked from a fixed list, a version number or a range, and the app’s tests check every event against the list of allowed fields. The same list is in the app under What’s sent.
Automatic pass renewal
Pro and Pro for teams passes need renewing once a year. If you turn on Renew my pass automatically (it’s off unless you turn it on), Curtains contacts curtains.app once a day after your renewal date, sending the pass’s renewal token, the device ID (see below) and the app version, until the pass is renewed or refused. With it off, the app never contacts curtains.app.
Your account on curtains.app
You sign in on curtains.app with a link we email you. There are no passwords. Signing in, buying and activating happen in your browser, not in the app. When you activate a device, the page gives the app a signed pass, which the app checks on your device without going online.
The account server stores only:
- Your email address, and when you created your account and accepted the Terms.
- Your purchases: the plan, its status, when the paid period ends, the number of seats, and the customer and subscription IDs Stripe gives us.
- Your team, if you’re on Pro for teams: its name, its members’ email addresses and pending invites. A team’s owner can see the email addresses of its members and invitees.
- Your devices: a device ID, which is a one-way hash of your computer’s hardware ID (the hardware ID itself never leaves your computer and we store only a further hash of it), the device name your computer reports (such as “MacBook Pro”), and when it was first and last activated or removed.
- Passes we issued: which device, which plan, and when each was issued and expires.
- Sign-in links, sessions and renewal tokens, stored only as one-way hashes.
- A log of the emails we sent: a hash of the recipient, the kind of email and whether it was sent.
It never stores IP addresses or browser user agents, and never receives anything from your screen. To limit how often one connection can ask for sign-in links or start a checkout, it counts requests under a scrambled form of the IP address (a one-way hash with a random key that changes every day), never the address itself. The key is deleted the next day, after which the scrambled form can’t be matched to any address, and the counts are deleted within 3 days. Cloudflare, which runs the server, keeps short request logs of its own.
Buying Curtains
Paid plans are sold through Stripe Managed Payments. Stripe is the seller (the merchant of record): it takes your payment, works out and collects sales tax or VAT, sends receipts and runs the billing portal where you change your payment method or cancel. Stripe collects your payment details, billing address and any tax ID under Stripe’s privacy policy. We never see your full card number.
Stripe tells us what we need to give you your plan: your email, the plan, the payment and subscription status, the seat count, and the customer and subscription IDs.
Emails we send
We email you only to sign you in and, if a team owner invites you, to invite you to their team. Stripe sends receipts and billing emails as the seller. We don’t send newsletters or marketing email.
Cookies
When you sign in, curtains.app sets two cookies:
- A session cookie, which keeps you signed in for up to 30 days or until you sign out.
- A sign-in cookie, which checks that a sign-in link is opened in the browser that asked for it.
Both are strictly necessary for signing in, can only be read by curtains.app, and are never used for tracking.
Your organization’s name and logo
When you create an account, you agree that Curtains may show your organization’s name and logo on curtains.app as a customer. We use the organization’s official logo, unchanged. To have it removed, email support@curtains.app. The Terms of Service explain this in full.
Who processes data for us
We use three service providers, each under a contract that limits what they can do with your data:
- Cloudflare hosts curtains.app and the update files, runs the account server and sends our emails.
- Stripe sells and bills paid plans as the merchant of record. For your payment details it decides how they’re used, under its own privacy policy.
- PostHog receives anonymous usage stats.
The Subprocessors page lists what each one handles and where. We don’t sell your personal information, and we don’t share it for advertising.
Why we use your data
If you’re in the EU, the EEA, the UK or Switzerland, these are our legal bases:
- To run your account, sell you a plan through Stripe and issue passes: performing our contract with you.
- To send sign-in links and team invites: performing our contract with you.
- To keep the service secure, for example rate limits on sign-in links: our legitimate interest in protecting the service and you.
- The update check: our legitimate interest in keeping Curtains safe and up to date. You can turn it off.
- Anonymous usage stats: your consent. You can withdraw it in Settings at any time.
- Showing your organization’s logo: our legitimate interest in showing who uses Curtains, which you can object to at any time.
- Tax and accounting records: a legal obligation, which Stripe meets as the seller.
How long we keep it
- Your account, purchases, team and devices: until you delete your account.
- Sign-in links: they expire after 15 minutes and are deleted a day later.
- Sessions: deleted once they expire, after at most 30 days.
- The email log: 30 days.
- Rate-limit counts: at most 3 days. Their daily key is deleted the next day.
- Expired Pro and team passes: deleted 90 days after they run out, unless the device is still renewing them.
- Usage stats: 7 years. Because they aren’t linked to you, we can’t find or delete one person’s events.
- Payment and tax records: kept by Stripe for as long as the law requires.
Deleting your account
Delete your account from your account page on curtains.app. You’ll type your email address to confirm. If you have a Pro or Pro for teams subscription that’s still set to renew, or one that is unpaid or paused and could still be charged, cancel it in the billing portal first.
Deleting your account removes everything the account server holds about you: your account, purchases, team, devices, passes, sessions, invites and email log. A team you own is deleted with it. Stripe keeps the payment records that tax law requires. A device that’s already activated keeps its pass until the pass runs out, because the app checks it without going online.
To remove Curtains’ data from your Mac, turn off usage stats, use Deactivate this device on Studio’s Account page, then delete the app.
Your rights
Depending on where you live, you have the right to:
- Know what personal data we hold about you and get a copy, in a format you can take elsewhere.
- Correct it.
- Delete it.
- Restrict or object to how we use it, including the use of your organization’s logo.
- Withdraw consent at any time, for example to usage stats, without affecting what happened before.
- Complain to your data protection authority, such as the one in your EU country, the Information Commissioner’s Office in the UK or the Federal Data Protection and Information Commissioner in Switzerland.
California residents have the right to know, delete and correct personal information, and not to be treated differently for using these rights. In the last 12 months we collected the categories described above: identifiers (your email address and device IDs), commercial information (your purchases) and internet activity (anonymous usage stats). We don’t sell or share personal information, as those words are defined in the California Consumer Privacy Act, and we don’t use sensitive personal information.
To use any of these rights, email privacy@curtains.app from the address on your account. We’ll confirm it’s you by email, and answer within one month (45 days for California requests). You can ask someone to make a request for you; we’ll check they have your permission.
Data outside your country
We’re based in the United States, and so are Cloudflare, Stripe and PostHog. Cloudflare serves curtains.app from data centers around the world. When personal data from the EU, the UK or Switzerland goes to the United States, we rely on the safeguards our providers offer, such as the European Commission’s Standard Contractual Clauses.
Security
- Frames stay in memory on your device and are never written to disk.
- Passes are signed, so the app can tell a real pass from a forged one, and a pass works only on the device it was issued for.
- Sign-in links work once and expire after 15 minutes. We store only hashes of links, sessions and tokens, never the values themselves.
- Updates are signed with a key that never leaves our release computer, and the app refuses any update that isn’t. The Mac app is signed with our Apple Developer ID and notarized by Apple.
No system is perfectly secure. If we learn of a breach that affects your data, we’ll tell you and the authorities as the law requires.
Children
Curtains is made for people who present at work and isn’t directed at children. We don’t knowingly collect personal data from anyone under 13, or under 16 in the EU and the UK. If you think a child has given us their email, write to privacy@curtains.app and we’ll delete it.
Changes to this policy
If we change this policy, we’ll post the new version here with a new effective date. If a change matters, for example a new kind of data or a new provider, we’ll tell account holders by email before it takes effect, and we’ll ask for consent again where the law requires it.
Contact
Email privacy@curtains.app, or write to Miscreants, LLC, 418 Broadway, Ste N, Albany, NY 12207.
Related: Terms of Service, License Agreement, Refund Policy, Subprocessors and Usage stats and privacy in the help center.