Security & audit

Controls your auditor will recognize, described without marketing language

inletAP checks every bill against that vendor's history at that property and your own approval ladder, records what it found, and lets you take the whole record out whenever you like. What it does not have yet is at the bottom.

The free plan processes 25 invoices a month with unlimited users, takes no credit card and does not expire. You get your own intake address at the end of setup.

Compliance

Audit log

Append-only
  1. 11:57 AM

    System(System)Exported

  2. 11:56 AM

    Priya Raman(Person)Approved

  3. 11:56 AM

    Dana Whitfield(Person)Sent For Approval

  4. 11:55 AM

    Dana Whitfield(Person)Fields Updated

    total$1,450.00$1,595.00

  5. 11:52 AM

    System(System)Extracted

One invoice, newest first, simplified from the in-app audit log. With separation of duties turned on, Dana edited and sent it, so the approval had to be somebody else’s.

Controls

What the product enforces

Append-only audit log

Actor, timestamp and source (user, system or rule) on every entry, and before and after values on the entries that have a previous value. No role has an edit or delete path.

Separation of duties

A workspace setting, off until an admin turns it on. With it on, whoever edited an invoice's amounts or coding, or sent it for approval, cannot approve it — decided per invoice from the audit trail, with no exception for admins.

Threshold-based approval

Amount tiers set how many approvals an invoice requires, matched on the extracted total. An invoice whose extraction scored below the confidence threshold stops in the review queue before it can be sent for approval at all.

Duplicate detection

Once an invoice is extracted, it is compared with up to 200 of that vendor's recent invoices — nine matching rules and six guards. The export refuses any document still carrying an open top-tier match.

Quarantine as a policy hold

Rules can stop a document in place — unrecognized sender, unacceptable attachment type — rather than letting it into the coding pipeline. Quarantined items are a saved view, not a silent drop.

Your data, out whenever you like

One request builds a ZIP of the whole workspace: every table as NDJSON and CSV, the original invoice files and the audit trail. Deleting the workspace is self-service, with seven days to cancel. No plan gate.

Tenant isolation and encryption

Scoping at the query layer rather than in the UI, TLS in transit, and encryption at rest with AWS-managed keys. Data is stored in AWS US East (Ohio); inletAP is operated from Toronto, Canada.

Roles

Who can do what

The baseline matrix. Thresholds and per-property approvers layer on top of it.
Roles do not separate editing from approving. Approval rights are further constrained by amount tiers, per-property approvers and, where an admin has turned it on, separation of duties.
 AP specialistControllerAdmin
View documentsYesYesYes
Edit extracted fieldsYesYesYes
Send for approvalYesYesYes
Approve at standard threshold—YesYes
Approve an invoice you edited or sent, with separation of duties on———
Override policy—YesYes
Manage rules—YesYes
Manage integrations——Yes
Manage users and roles——Yes

Roles do not separate editing from approving. Approval rights are further constrained by amount tiers, per-property approvers and, where an admin has turned it on, separation of duties.

Document lifecycle

Every document is in exactly one named state

Status is not a label someone applies — it is the position in the pipeline, and every transition is logged.

new

Accepted over SMTP, pending parse.

parsed

MIME parsed, attachments indexed.

extracted

Fields read, confidence scored, awaiting coding rules.

needs_review

Confidence below threshold, or a policy exception.

ready_for_approval

Complete and policy-valid.

approved

Approval chain complete. Re-coding the split afterwards returns it to review.

exported

Posted to the target system with an external ID.

partially_exported

A split invoice where some target companies posted and some did not.

failed_export

Export attempt failed, with the reason recorded.

duplicate

Matched an existing invoice or document.

quarantined

Held by a security or policy rule.

held_quota

Parsed and held: this month's plan allowance is spent.

filtered

Not an invoice. Kept, searchable, restorable, never billed.

Reliability

The failure modes that matter for AP

An AP pipeline that silently drops a document is worse than one that is slow. These are the guarantees on that.
  • No silent drops — a job that exhausts its retries is kept in the queue's failed state with its payload and error, and the invoice keeps its own failure reason on screen.
  • Idempotent pipelines: a retried job cannot produce a second bill or a second document.
  • Retry-safe SMTP semantics — a transient backend failure returns a temporary failure so the sender retries, instead of accepting mail we cannot process.
  • Export items record the external ID of the bill they created, so a retry skips what already posted and works only on what did not.
  • Structured logs and traces on each pipeline stage, so a stall is visible rather than inferred.

What inletAP does not have yet

inletAP is an early product and does not currently hold third-party security certifications such as SOC 2. We are not going to phrase that as "SOC 2 ready" or put a badge on it that implies otherwise.

If your procurement process requires an audit report, that is a genuine reason not to buy yet, and we would rather you knew now.

What we will do: complete any security questionnaire honestly, tell you exactly which controls are implemented versus planned, and put commitments in writing. support@inlet-ap.com.

Reporting a vulnerability

Send it to security@inlet-ap.com. That address reaches the operator directly rather than a ticket queue.

We acknowledge a report within one business day, give you a first triage and severity decision within three, and update you at least every seven days until the issue is closed.

There is no paid bug bounty, no PGP key and no 24/7 hotline today. inletAP is run by one person in one time zone, so a report that arrives on a Friday evening may not be read until Monday.

Security questions

What exactly does the audit log record?
Document history, with the actor, the timestamp, the source — user, system or rule — and the old and new value where a field changed. That covers parsing, extraction, rule matches, field edits, routing decisions, approvals, rejections and their comment, successful exports, and the failures and retries in between. The entries that carry a before value are field edits, status changes, restores, allocation edits, role changes, member removals and revoked invitations; an approval or an export has no prior value to record. One honest gap: workspace configuration changes such as approval tiers are not audited yet. The log is append-only: there is no edit or delete path exposed to any role.
How is one organization's data kept from another's?
Tenant scoping is applied at the query layer, so every read and write is bound to the requesting organization rather than relying on the UI to filter. Multi-entity separation inside an organization is modeled explicitly too, which is what keeps separate owner and joint venture books apart.
Who can approve an invoice?
Whoever your roles and thresholds say. Roles do not separate editing from approving: an invoice addressed to you is yours to decide whatever your role, and an unaddressed one can be claimed by a Controller Approver or an Admin. The control that separates the two is separation of duties, a workspace setting that is off until an admin turns it on — with it on, the person who edited the invoice's amounts or coding, or who sent it for approval, cannot approve it, and that holds for admins too. Amount tiers decide how many approvals are needed, matched on the extracted total with the lower bound inclusive and the upper bound exclusive. An invoice whose extraction scored below the confidence threshold stops in the review queue for a person before it can be sent for approval at all, whatever its amount — there is no separate escalation that adds an approver.
Is data encrypted?
TLS in transit, and encryption at rest on the database and on object storage using AWS-managed keys. We do not offer customer-managed KMS keys or bring-your-own-key today. Accounting connector OAuth tokens get a second layer — AES-256-GCM in the application, so a database dump alone does not yield a working ledger credential. Inbound SMTP is served by our own mail infrastructure rather than a third-party relay, so raw messages are not passing through an intermediary before we store them.
Do you support SSO?
Enterprise SSO is available on request on Pro and Enterprise — we configure it with you against your identity provider. It is not self-serve, there is no switch in the app, and we are not going to promise a particular protocol or a setup date until we have done it with you. On every plan, access is by individual accounts with role-based permissions, and since every plan has unlimited users, you never have to share a login to save a seat.
Can we get a DPA, a security questionnaire completed, or a pen test report?
A DPA is part of the Enterprise plan. On security questionnaires and third-party audit reports, the honest position is that inletAP is early: we will answer any questionnaire directly and truthfully, and we will tell you plainly which certifications we do not currently hold rather than implying otherwise. Write to us and you will get a straight answer the same week.
When does duplicate detection run, and what can it stop?
Once an invoice is extracted, its attachment fingerprint and a vendor / invoice-number / date / amount comparison run against up to 200 of your most recent invoices from that vendor, going back two years — nine matching rules and six guards — and a match raises a finding on the document. The comparison runs again whenever the invoice is edited. There is no third pass just before export; what the export does is refuse any document still carrying an open top-tier match, which is the one thing in the product that can hold a bill back. Separately, a redelivered inbound message is suppressed at intake on the ingestor's idempotency key, and an uploaded file is de-duplicated on its own hash.
What is quarantine for?
It is a policy hold. A rule can quarantine a document — an unrecognized sender, an attachment type you do not accept — and it stops in place instead of entering the coding pipeline. Quarantined items are a saved view in the inbox so they are reviewed rather than forgotten.
Where is our data stored?
inletAP is operated from Toronto, Canada, and runs on Amazon Web Services in the US East (Ohio) region, so workspace documents, extracted fields and audit records are stored and processed in the United States. Canadian customers should read that as a cross-border transfer: the privacy policy sets out what it means, and we remain accountable for the data under PIPEDA.
How long is data retained?
Invoice documents, extracted fields and audit records are kept for as long as you have a workspace, because they are your accounting record — there is no automatic purge of them. What you do control is the raw inbound email: the retention window for it is a setting in the app, from 30 days to ten years, and it is 90 days until somebody changes it. Application logs are kept 30 days. Above 90 days, note that object storage expires the original message anyway, and the app says so beside the setting rather than letting you set a window it cannot honor.
Who can bulk-import our property and vendor lists, and what happens to the file?
Importing properties, units, vendors and entities is open to admins, controllers and AP specialists; an outside viewer cannot start one. The preview is read-only: it parses the file, matches each row against what you already hold and computes the diff, and it changes no record of yours. Only the commit writes, and it writes one audit entry for the run rather than one per row — the actor, the file name, what was imported and the created, updated, skipped and error counts — so three hundred new buildings are traceable to the file and the person who imported them without burying every other decision that day. The row-by-row detail, including the old value beside the new on each field that changed, stays on the import run itself. The uploaded file is held as text on that run while the preview is open, so a column can be re-pointed without uploading again, and it is cleared when you commit the run, when you discard it, and when the preview expires seven days after it was uploaded. A preview cannot be committed once it is seven days old. One limit worth knowing before you import rather than after: there is no undo button. The commit also writes in batches of 100 rows and can save part of a file and stop, which the report states plainly — re-uploading the same file finishes it instead of duplicating it, because an import matches on the same keys every time.
Can we get our data out, and can we delete the workspace ourselves?
Yes to both, from the app, with no ticket and no plan gate. An admin can build a ZIP of the whole workspace: every table as NDJSON and as CSV, the original invoice files, the audit trail, a manifest, and a coverage report that names anything left out and marks the archive INCOMPLETE if anything was. The download link is live for seven days and you can ask again whenever you like. Any member — including an outside approver who only sees one building — can request a copy of their own data, because that is a right they hold rather than a feature the workspace buys. Deleting the workspace is self-service too: an admin types the workspace name, and there are seven days to cancel before anything is destroyed. Two things survive on purpose and are named on the screen: Stripe billing records, which Canadian tax law requires us to keep for six years, and a record that the deletion happened, kept 24 months so we can prove it to you.

See also the privacy policy and the terms.

Start free and run your own invoices through it

25 invoices a month, unlimited users, no credit card. Send this month's vendor bills and watch each one get checked, coded and posted to your books.