Sending
Duely connects to your outgoing mail server and sends the reminder as you. The
message comes from your address, appears in your sent items where your provider
keeps a copy, and is threaded onto the original invoice email so your client sees
one conversation.
We keep the subject line and body of the reminders we sent, because you need
to be able to see what went out in your name. We do not keep anything else that
passes through the connection.
Reading
Every few minutes, Duely checks your inbox for new messages since the last time it
looked. For each new message it reads the headers — who it is from, what it is
replying to — and matches it against the chases you have running, in this
order:
-
The reply headers. If the message is a reply to something Duely sent, the headers say so outright.
-
The provider thread. If your provider groups it into the same conversation, that is used next.
-
The sender, recently. Failing both, a message from a client you are chasing, received within the last sixty days.
Subject lines are never matched on their own — too many unrelated emails share
a subject, and a wrong match would stop the wrong chase.
Messages that match nothing are ignored and nothing about them is stored. Messages
that do match produce one record: which chase it belongs to, whether it looked like
a person, an autoresponder, or a bounce, when it arrived, and a snippet of about
three hundred characters.
What Duely never does
The mailbox connection is opened in read-only mode, and messages are fetched with the
peek instruction that leaves the read flag alone. Duely has no code path that issues
a delete, a move, a copy, or a flag change — and there is a test that connects
to a fake mail server, records every command Duely sends, and fails the build if any
of those appears.
-
×
Mark a message as read
-
×
Delete or archive anything
-
×
Move anything between folders
-
×
Send anything you did not schedule
-
×
Store message bodies
-
×
Read mail unrelated to a chase
Your credentials
Mailbox passwords are encrypted with AES-256-GCM before they are written. The
encryption key lives in the server's environment, never in the database, so a copy
of the database on its own is not enough to decrypt anything. Each stored value
carries its own initialisation vector and authentication tag, and a value that has
been tampered with fails to decrypt rather than being used.
A password is decrypted in memory at the moment of sending or polling and discarded.
It is never written to a log, never returned to your browser, and never rendered
into a page — the settings screen shows a masked placeholder and only writes a
new value if you type one.
We ask for an app password rather than your account password wherever your provider
offers one, because you can revoke an app password without changing anything else.
Revoking it removes Duely's access immediately, from your side, without asking us.
Your invoices and clients
Names, email addresses, invoice numbers, amounts and due dates — whatever you
import or type. It is stored so Duely can write the reminders and know when to stop,
and it is scoped to your workspace: every query is filtered by it, so nothing you do
in Duely can reach another workspace's data, and nothing another customer does can
reach yours.
Separately from that, Duely's operator can open an account's data to resolve a
support issue. Both of those are true at once: workspace scoping governs every normal
path through the product, and support access is a deliberate exception to it that
exists so somebody can actually fix your problem when you write in.
What that means in
practice is worth reading, so it is set out in full below.
If you have not connected Stripe, Duely never touches money. Payments happen the way
they always have, directly between you and your client. Marking an invoice paid tells
Duely to stop; it does not tell us anything about how you were paid.
When we look at your account
Duely is run by one person. When you write in about a reminder that did not send, or
an invoice that will not mark itself paid, answering you sometimes means looking at
the account rather than guessing from a description. So there is a support tool that
can open an account's data, and in some cases sign in as a user to see what they are
seeing.
That is real access and we are not going to describe it as something smaller than it
is. What makes it acceptable is what surrounds it.
Every access is recorded
Who looked, when, and the reason they gave — a reason is required before
anything opens, and it is stored with the record. That record is written to
your activity log, not only to ours. You
can see it from your own account, without asking us and without us choosing to tell
you. Nobody can delete those entries, including the person they are about.
Access is used to resolve a specific issue and nothing else. Not to browse, not to
look at how you are doing, not to read your invoices out of curiosity.
Your mailbox password is never part of it
Stored mailbox credentials are never displayed and
never decrypted for support purposes, under any circumstance. There is no
screen, no export and no debug view anywhere in the support tool that shows them,
masked or partial or otherwise. The only thing that ever decrypts an email password
is the code that connects to your mail server to send a reminder or read a reply.
You handed over an email password. That one stays sealed.
Signing in as you is look-only
When support signs in as a user to reproduce a problem, that session cannot act. It
cannot send email — no reminder, no
test message, nothing that reaches your clients. It cannot start or advance a chase.
It cannot change your billing or your plan. It cannot connect or disconnect Stripe.
It cannot change your mailbox settings, delete anything, or invite anyone.
Those limits are enforced by the application, not by hiding buttons. The session also
expires after thirty minutes and cannot be extended; carrying on means starting again
with a new reason, which gets recorded like the first one.
If you connect Stripe
Connecting Stripe is optional, off unless you turn it on, and changes exactly one
thing: Duely can put a payment link in your reminders so a client can pay from the
email.
The money goes directly from your client into your
own Stripe account. It never passes through an account Duely controls, and
Duely is not the merchant of record — you are. Your payouts, your disputes,
your refunds, your agreement with Stripe.
What Duely does receive is a message from Stripe saying a payment succeeded, which
invoice it was for, and how much. That is what lets it mark the invoice paid and stop
the reminders without you having to. It is the whole of Duely's involvement with the
money, and it is the reason we do not claim never to see it.
Disconnecting revokes Duely's access at Stripe rather than just forgetting it here,
so there is no authorisation left behind that you cannot see.
The writing assistant
If you ask Duely to help reword a reminder, the template is sent to Anthropic's API
to be rewritten. Real client names, real invoice numbers and real amounts are
stripped out first and replaced with the placeholder tags Duely fills in at send
time, so what leaves the server is a form letter rather than anybody's data. Duely
shows you what it removed.
Nothing is sent anywhere unless you press the button, and the result is shown to you
as a suggestion — it is never saved into a live sequence on its own.
Reading an invoice you upload
Duely can read an invoice off a PDF or a photo so you do not have to type it in.
This one works differently from the writing assistant above, and the difference
matters enough to spell out.
To read the document, Duely sends the document
itself to Anthropic. Whatever is printed on it goes too — your
client's name, the amount, their address if it is on there. Nothing is stripped
first, because the details are the thing being read.
So it is off until you turn it on. A workspace has to switch it on deliberately,
after being told plainly what is sent, and can switch it off again at any time.
If you never use it, no invoice document ever leaves this server.
-
The file is deleted as soon as it is read.
It is held only for the
seconds it takes to send, and never written to disk here.
-
Nothing is saved from it automatically.
What comes back is filled into
the invoice form for you to check. An invoice exists only once you save it.
-
Anthropic does not train on it.
Duely uses the paid API, where inputs
are not used to train models.
-
It counts against the same daily limit.
Reading documents and rewriting
reminders share one budget of twenty calls a workspace a day.
Billing
Card details are handled entirely by Stripe and never reach our servers. We store the
identifiers Stripe gives us — a customer id and a subscription id — and
what plan they entitle you to.
The waitlist
If you join the waitlist we store your email address, which form you used, any
campaign parameters that were in the link, and a one-way hash of your IP address so
we can spot a machine submitting hundreds of addresses. The raw address is not kept.
Nothing is added to the list until you click the confirmation link, so nobody can put
your address on it but you. Every email we send from the list has an unsubscribe
link, and unsubscribing is immediate.
Deleting your account
Disconnecting a mailbox removes the stored credentials straight away. Deleting your
workspace removes your invoices, clients, chases, message history and reply records
— the database is set up so that they go with it rather than being left behind
as orphans. Backups age out on their own schedule; ask and we will tell you where
that stands.
Questions
If anything here is unclear, or you want to know something this page does not cover,
ask before you connect anything. A question about what we do with your mailbox is
always a fair question.