Help center
Kordvik — User Manual
Version 2.0 · June 2026 — covers the full user interface
Contents
- What is Kordvik?
- Your account & sign-in
- Account security & profile
- Workspaces: create, join & switch
- Dashboard
- Vendors
- Contracts
- Renewals
- Reports
- Savings & opportunities
- Activity
- Importing data (CSV & email)
- Uploading a PDF contract
- Settings
- Roles and permissions
- Plans and limits
- Platform administration (operator-only)
- System & error pages
1. What is Kordvik?
Kordvik is a vendor and contract tracker for small and medium businesses. It gives you one place to:
- See every vendor you spend money with
- Track contract terms, amounts, and renewal dates
- Get email (and optionally Slack or Teams) reminders before renewals sneak up on you
- Spot auto-renew risk and analyse your total spend
- Use AI to read PDF contracts, flag risky clauses, benchmark vendors, and draft renewal negotiations
Everything you do lives inside a workspace. A workspace holds your vendors, contracts, members, and settings; you can belong to several (for example, one per client or business unit).
2. Your account & sign-in
Before you reach a workspace you sign in to a Kordvik account (an email address). This section covers everything on the sign-in screens.
Create an account
From the landing page click Sign in, then Create an account (or Start free). On the Create your account screen enter:
| Field | Notes |
|---|---|
| Your work email. | |
| Password | At least 6 characters (max 100). |
| Confirm password | Must match. |
Click Create account. Depending on how your Kordvik instance is configured:
- Email confirmation required — you land on a confirmation screen and receive an email with a "confirm your account" link. Click it to activate the account. (On a development/test instance the link is shown on screen instead of emailed.)
- No confirmation required — you are signed straight in.
If you didn't get the email, go to Resend email confirmation (linked from the login page), enter your address, and click Resend.
Log in
On the Welcome back screen:
- Enter your Email and Password, optionally tick Remember me, and click Log in, or
- Click Log in with a passkey to sign in passwordlessly with a passkey you've registered (see section 3), or
- If your instance has external providers (e.g. Google, Microsoft) configured, use the provider buttons.
Helpful links on this page: Create an account, Forgot your password?, and Resend email confirmation.
If the email/password don't match you'll see "Invalid login attempt." After several failed attempts the account is temporarily locked out (a "Locked out" screen appears — wait and try again later). If you have two-factor authentication enabled, you'll be asked for a code next (see below).
Two-factor at login
If your account has 2FA enabled, after your password you reach Two-factor authentication:
- Enter the 6-digit code from your authenticator app and click Log in. Tick Remember this machine to skip 2FA on this browser in future.
- No app to hand? Click log in with a recovery code and enter one of your saved one-time recovery codes.
Forgot / reset your password
- On the login page click Forgot your password?, enter your email, and click Reset password. You'll always see a "check your email" confirmation (whether or not the address exists).
- Open the email and click the reset link. On the Reset password screen enter your email and a new password (twice) and click Reset.
- You'll be told the password was reset, with a link to log in. (A broken or already-used link shows an "Invalid password reset" message — start the flow again.)
3. Account security & profile
Open your account area from Profile at the bottom of the sidebar (or the Profile link). It has its own left-hand menu: Profile, Email, Password, External logins (if available), Two-factor authentication, Passkeys, Personal data, plus Back to app and Sign out.
Profile
Shows your username (read-only) and an editable Phone number. Click Save to update.
Shows your current email with a ✓ Confirmed badge (or a Send verification email button if it's unconfirmed). To change it, type a new address under New email and click Change email — a confirmation link is sent to the new address; the change completes when you click it.
Password
- Change password — enter your old password and a new one (twice), then Update password.
- If you signed up only via an external provider you'll see Set password instead, to add a local password so you can log in without the provider.
Two-factor authentication (2FA)
The Two-factor authentication screen is the hub:
- Add authenticator app / Set up authenticator app — opens Configure authenticator app: scan the QR code (or type the shown key) into Microsoft/Google Authenticator, enter the 6-digit Verification Code, and click Verify. On first setup you're shown 10 recovery codes — save them somewhere safe.
- Reset recovery codes / generate a new set — produces a fresh set of 10 codes (the old ones stop working). The page warns you when you're running low.
- Reset authenticator app — issues a new key (your app must be reconfigured); 2FA is off until you re-verify.
- Disable 2FA — turns off the second factor (keys are kept unless you also reset them).
- Forget this browser — clears a "remembered" device so it will prompt for 2FA again.
Passkeys
The Passkeys screen lists your registered passkeys. Click:
- Add a new passkey — your browser/device prompts you to create one; you're then taken to name it.
- Rename — change a passkey's name (helps you tell devices apart).
- Delete — remove a passkey.
Registered passkeys power the Log in with a passkey button on the login screen. (Up to 100 passkeys per account.)
External logins
If external providers are enabled, Manage your external logins lists the providers linked to your account, lets you Remove one (when it's safe to do so), and offers buttons to add another service.
Personal data
The Personal data screen lets you:
- Download a copy of the personal data Kordvik holds for you.
- Delete your account. On Delete personal data you confirm with your password and click Delete data and close my account. This permanently removes your account and signs you out. You can't delete your account while you're the only admin of a shared workspace that still has other members — transfer the admin role or delete those workspaces first.
4. Workspaces: create, join & switch
Create a workspace
When you sign in without a workspace you're taken to Create your workspace:
| Field | Notes |
|---|---|
| Workspace name | Required. 2–200 characters. Can be changed later. |
| Currency | Default display currency for spend figures (EUR, USD, GBP, SEK). |
| Timezone | Used when scheduling reminder emails. |
Click Create workspace — you land on the Dashboard. (The workspace's URL "slug" is derived from the name and is permanent.)
The onboarding checklist
A brand-new workspace shows a Getting started card with a progress bar and four steps:
- Create workspace — done automatically.
- Add your first vendor — Add vendor.
- Add a contract — Add contract.
- Set up alerts — Configure (notifications).
Each step ticks off as you complete it; the card disappears once you're set up. (View-only members don't see the action buttons.)
Switch between workspaces
If you belong to more than one workspace:
- The workspace name at the top of the sidebar becomes a drop-down — click it to jump to another workspace or Create new workspace.
- Visiting the site root also shows a Pick a workspace screen listing all your workspaces. (If you belong to exactly one, you're taken straight into it.)
Join a workspace by invitation
When an admin invites you, you receive a link to /invites/…. Opening it (while signed in) shows Join workspace with the role you've been offered; click Accept invite. Then:
- Success — a "You're in" screen with an Open workspace button.
- Wrong account — if the invite was sent to a different email, you'll be told which address to sign in with.
- Invalid / revoked — an "Invite not found" message; ask the admin to re-send.
If a workspace is suspended
If a platform administrator has suspended your workspace, opening it shows a Workspace suspended page explaining it's temporarily unavailable, with a link back to your other workspaces.
5. Dashboard
The Dashboard is your at-a-glance view. It refreshes every time you open it.
Metric cards
| Card | What it shows |
|---|---|
| Renewals (30d) | Active contracts that renew — or whose cancel-by date falls — within 30 days |
| Renewals (60d) | The same, within 60 days |
| Auto-renew risk | Auto-renewing contracts among those 60 days — these roll over without action |
| Annual spend | Total annualised spend across all active contracts |
If your contracts use more than one currency, the Annual spend card converts everything to the workspace base currency using ECB reference rates (the conversion date is shown beneath the figure). If live rates are temporarily unavailable, a small "rates unavailable — not converted" note appears and amounts are shown per currency instead. This matches how the Reports page totals spend.
Upcoming renewals table
Shows the next 8 active contracts you need to act on (within 90 days), sorted by their action deadline. A contract's action deadline is its cancel-by date when it has a notice period (see Notice period and cancel-by date), otherwise its renewal date. Rows with a notice period show "Cancel by …" under the renewal date. Each row carries a colour-coded urgency badge counting down to the action deadline:
| Badge | Meaning |
|---|---|
| Red — danger | Deadline in 30 days or fewer (or already overdue) |
| Yellow — warn | Deadline in 31–60 days |
| Blue — info | Deadline more than 60 days away |
| Red — "notice passed" | The cancel-by date has passed but the contract hasn't renewed yet — it is too late to give notice |
Days are counted in the workspace's timezone (Settings → Workspace), so "in 1d" doesn't flip a day early or late around midnight.
Click Open on any row to go directly to that contract's detail page. Click View all to see the full contract list.
Quick actions
Three buttons let you add data without leaving the Dashboard:
- Add vendor — opens the Add vendor form
- Add contract — opens the Add contract form
- Import CSV — goes to the CSV import page
6. Vendors
Sidebar → Vendors
Vendor list
Every vendor you track appears here as a table row showing name, category, number of active contracts, annual spend (active contracts only), and next renewal date. Click any row to open the vendor detail page.
Archived vendors are hidden. Tick Show archived above the table to list them too (they carry an Archived badge).
Add a vendor
Click Add vendor (top right). A modal opens with three fields:
| Field | Required | Notes |
|---|---|---|
| Name | Yes | 1–200 characters |
| Category | Yes | software, services, infrastructure, utilities, legal, insurance, finance, other |
| Website | No | e.g. https://vendor.com — shown as a link on the detail page |
Click Save to create the vendor.
Vendor detail page
Click a vendor row to open its detail page. From here you can:
Edit the vendor
Click Edit (top right) to change the name, category, or website.
Archive a vendor
When you stop working with a vendor, click Archive (Editors and Admins). An archived vendor is hidden from the Vendors list and isn't offered when you add a new contract; everything else — its contracts, contacts and notes — stays exactly as it is. If the vendor still has active contracts, Kordvik asks you to confirm first: archiving does not cancel those contracts or their reminders (mark them cancelled on each contract page if they have ended). Click Unarchive to bring the vendor back. Both actions appear in the Activity log.
Contracts
A table lists every contract linked to this vendor — name, renewal date, amount, frequency, and auto-renew status. Cancelled and expired contracts are listed last with a status badge. Click Open to go to a contract, or click Add contract to create a new one pre-linked to this vendor.
Benchmark
Click Run AI benchmark for a quick AI read on whether this vendor's spend and terms look competitive for its category. Kordvik shows a verdict badge (Competitive, Fair, Watch, or Overpriced), a short summary, observations, and suggested negotiation levers. This needs at least one contract on the vendor.
The benchmark is an estimate from the model's general knowledge — not live market pricing — and is stamped with the time it ran. If you edit the vendor or its contracts afterwards, a "changed since the benchmark ran — re-run" hint appears; click Re-run for a current read.
Contacts
Keep track of the people at this vendor (account managers, legal contacts, etc.).
Click + Add to open the contact form:
| Field | Required |
|---|---|
| Name | Yes |
| Role | No |
| No | |
| Phone | No |
Click Remove on a contact row to delete it.
Notes
Free-text notes attached to the vendor (meeting notes, negotiation context, etc.).
Type in the textarea and click Add note to save. Each note shows its creation date. Click Remove to delete a note.
7. Contracts
Sidebar → Contracts
Contract list
Every contract in the workspace is shown here — vendor, name, renewal date, amount, frequency, and auto-renew status. A small icon shows the contract type (⚙️ Service, 🌐 Domain, 🔒 SSL Certificate, 📦 Software License). Click Open to go to a contract's detail page.
Use the type filter chips above the table (All, ⚙️ Service, 🌐 Domain, 🔒 SSL, 📦 License, Other) to narrow the list. If no contracts match the chosen type, the page says "No contracts of this type" with a Show all button.
The status chips below them choose between Active (the default), Ended (cancelled or expired contracts) and All statuses. Ended contracts carry a Cancelled or Expired badge. Contracts with a notice period show their cancel-by date under the renewal date.
If you have reached your plan's contract limit, a banner appears at the top of the page and the Add manually button is disabled. Upgrade your plan to add more.
Add a contract manually
Click Add manually. Fill in the form:
| Field | Required | Notes |
|---|---|---|
| Vendor | Yes | Select from existing vendors |
| Type | No | Service, Domain, SSL Certificate, Software License, or Other |
| Contract name | Yes | 1–200 characters |
| Amount | No | Numeric value |
| Currency | No | EUR, USD, GBP, SEK (defaults to workspace currency) |
| Frequency | No | Annual, Monthly, One-off (defaults to Annual) |
| Auto-renew | No | Tick if the contract rolls over automatically |
| Start date | No | Defaults to today |
| Renewal date | No | Defaults to 1 year from today |
| Notice period (days) | No | How many days before the renewal date notice must be given to cancel (0–730). The computed Cancel by date is shown under the field. Leave empty if the contract has no notice period |
| Reminders | No | Tick which advance notices to create: 90 / 60 / 30 days before the renewal date — or before the cancel-by date when a notice period is set (60d and 30d are ticked by default) |
Choosing a Type of Domain or SSL Certificate sets sensible defaults (Annual, auto-renew on, a 1-year term); a Software License defaults to Annual with auto-renew off. These only fill fields you haven't already changed yourself.
Click Save. The contract appears in the list immediately.
Upload a PDF contract
Click Upload PDF to let Kordvik read a PDF and extract the contract details automatically — including a best guess at the contract Type. See section 13 for the full walkthrough.
Contract detail page
Click Open on any contract row.
Edit contract details
All fields from the Add form are editable here. Change any value and click Save changes. A "Saved." confirmation appears briefly.
If you change the Renewal date or the Notice period, Kordvik automatically moves any pending reminders to match. A 30-day reminder stays 30 days before the new date (or the new cancel-by date), and so on.
Notice period and cancel-by date
Many contracts can only be cancelled if you give notice a set time before they renew — "terminate with 30 days' written notice before the end of the term". Enter that as the Notice period (days) and Kordvik works out the cancel-by date: the renewal date minus the notice period. For example, a contract renewing on 14 Aug 2026 with a 30-day notice period must be cancelled by 15 Jul 2026.
When a notice period is set:
- Reminders count back from the cancel-by date, not the renewal date, so a 30-day reminder arrives 30 days before you must give notice. Reminder emails and Slack/Teams messages show the cancel-by date.
- Urgency badges on the Dashboard and Renewals page count down to the cancel-by date, and the Renewals windows include contracts whose cancel-by date falls inside them.
- Risk analysis flags a contract High when the cancel-by date has passed, the contract auto-renews and no renewal decision was recorded ("Notice deadline passed — this contract will auto-renew"), and Medium when the cancel-by date is 14 days or less away with no decision.
- Each auto-renewal keeps the same number of notice days, so the cancel-by date moves with the renewal date.
When you upload a PDF, the AI reads the notice period from the contract (months are converted to days on the calendar, counting back from the renewal date) and shows it on the review form so you can check it before saving.
End or reactivate a contract
A contract is Active until it ends. Editors and Admins can click Mark cancelled at the top of the contract page when a contract has been cancelled. Kordvik also ends contracts automatically once a day:
- An auto-renewing contract whose renewal you Declined becomes Cancelled as soon as its renewal date passes (instead of being rolled over).
- A contract that doesn't auto-renew (or is one-off) becomes Expired 30 days after its renewal/end date, unless you move the renewal date forward first.
An ended contract keeps all its details but its pending reminders are cancelled (shown as Skipped), and it no longer counts in renewals, the calendar, the Dashboard, spend reports or savings. Click Reactivate to make it active again; Kordvik restores its reminders for the current cycle where their dates are still in the future. Ending and reactivating are recorded in the Activity log. Use Delete only if you want the contract gone for good.
Renewal & ownership
Assign an Owner (any active member) so it's clear who looks after the contract.
Record a Renewal decision for the upcoming renewal: click Approve or Decline, or Reset back to undecided. Until you decide, the badge reads Decision needed. A declined auto-renew contract will not be rolled over automatically by Kordvik — once its renewal date passes it is marked Cancelled.
Negotiation assistant
Click Draft negotiation to have the local AI model write a ready-to-edit vendor email, plus talking points and a short prep checklist, using this contract's details (and any benchmark and risk findings). It can take a moment.
Once a draft appears you can:
- Copy email — copies the subject and body to your clipboard.
- Open in email — opens a new message in your email app, pre-addressed to the vendor's first contact (if one has an email on file) with the subject and body filled in.
Click Re-draft to generate a fresh version. The draft is AI-generated — review and edit it before sending.
AI risk review
Below the automatic risk analysis, click Run AI risk review to have the local model read the uploaded PDF and flag clause-level risks (auto-renewal, termination, price increases, liability, and so on). Each finding shows a severity badge, a short explanation, and the relevant quote from the contract. This is only available once a PDF has been uploaded for the contract.
The review result is cached and stamped with the time it ran. If you edit the contract after a review, Kordvik shows a "this contract changed since the review ran — re-run to refresh" hint; click Re-run to refresh the findings.
Documents
The Documents section lists every file stored for the contract — the original, amendments, and anything else — with its type, size and upload date. Click a file name to open it.
- Add a document (Editor or Admin): pick the type (Original, Amendment or Other) and choose a PDF of up to 25 MB. Only PDFs can be attached for now.
- The document marked Primary is the one View PDF opens and the AI risk review reads. A contract added by hand or by CSV import has no document at first; the first PDF you add becomes its primary document.
- Delete a document and confirm to remove it permanently. If you delete the primary document, the remaining original (or else the newest PDF) becomes primary.
Reminders
The Reminders table shows each reminder configured for this contract:
| Column | Meaning |
|---|---|
| Offset | How many days before the renewal date (or before the cancel-by date, when the contract has a notice period) |
| Scheduled date | Calendar date the reminder email will be sent |
| Status | Pending (not yet sent), Sent, Failed, Skipped |
| Sent | Actual send timestamp (once sent) |
| Remove | Deletes a pending reminder (Sent reminders cannot be removed) |
Add a reminder: Type a number of days (1–365) into the input at the bottom of the table and click Add. You cannot add a duplicate offset if one is already pending.
Delete a contract
Click the red Delete button at the top of the page. Deletion is immediate and permanent — all reminders and documents attached to the contract are also deleted.
8. Renewals
Sidebar → Renewals
The Renewals page gives you two ways to see upcoming renewals: a list grouped by month, or a calendar grid.
List view
Use the time-window buttons to filter by horizon: 30 days, 60 days, 90 days, 180 days, 365 days. The default is 90 days.
Only active contracts are listed. The window counts to each contract's action deadline — its cancel-by date when it has a notice period, otherwise its renewal date — and contracts are grouped by the month that deadline falls in. Each row shows the renewal date (with "Cancel by …" underneath when there is a notice period), vendor, contract name, annualised amount, auto-renew status, an urgency badge (see badge meanings in section 5), and a Decision badge — Decision needed, Approved, or Declined. Auto-renew contracts always show a decision badge; for non-auto-renew contracts the badge appears once a decision has been recorded.
Click Open to go directly to that contract.
Calendar view
Click Calendar to switch to a 3-month calendar grid (always starting from the current month). Days with renewals of active contracts show coloured dots — red for imminent, orange for soon, blue for later (based on the cancel-by date when a notice period is set).
- One contract on a day — clicking the day navigates directly to that contract's detail page.
- Multiple contracts on a day — clicking the day opens a small popover listing all the contracts. Click Open → next to any one to navigate to it.
9. Reports
Sidebar → Reports
Summary metrics
Three cards give a quick financial picture:
| Card | What it shows |
|---|---|
| Total annual spend | Sum of all contracts annualised to a yearly figure |
| Auto-renew exposure | Annual spend on auto-renewing contracts, and how many that is |
| Average contract | Total spend divided by number of contracts |
Spend trend
A 12-month line chart shows how your annualised spend has moved over the past year. Hover over the chart to see the spend figure for each month.
Spend by category and top vendors
Two tables sit side by side:
- By category — each category, its total annual spend, and percentage of total.
- Top vendors — the 10 largest vendors by annual spend, with their contract count.
All figures are shown in the workspace's base currency. When contracts use more than one currency, Kordvik converts them to the base currency using ECB reference rates (a banner at the top shows the rate date). If live rates are temporarily unavailable, a banner says so and amounts are left unconverted — where several currencies are present, the breakdowns will mix them.
Export for accounting
Export your data as CSV files that import into Xero, QuickBooks, Fortnox, and most accounting tools:
- Contracts CSV — one row per contract. Alongside each contract's own amount it includes base-currency columns (annualised amount converted to the workspace base currency, and the base currency code) so a mixed-currency book totals correctly.
- Vendors CSV — one row per vendor.
Both files are written so accented and non-Latin names render correctly in Excel. Exporting requires the Editor or Admin role — Viewers can read the data in the app but cannot bulk-export it (see section 15).
10. Savings & opportunities
Sidebar → Savings
The Savings page is where Kordvik surfaces ways you might cut cost or tighten up tracking. It scans your vendors and contracts and lists opportunities such as:
- A monthly contract that could likely move to annual billing for a discount.
- An auto-renewing contract with no reminder set (these are flagged more urgently when already overdue).
- More than one tool in the same category — possible overlap to consolidate.
- A contract with no cost recorded, so it isn't counted in your spend.
- Vendors an AI benchmark flagged as Overpriced (run a benchmark on a vendor to add these).
Each opportunity shows a short explanation and, where it can be quantified, an estimated yearly saving. A card at the top totals the estimated potential savings per year.
These figures are conservative estimates, not quotes. They use cautious heuristics (for example, only a fraction of spend for an overpriced vendor) and exclude one-off setup fees, so treat them as a starting point for review rather than a guarantee. Where contracts span multiple currencies the total is converted to the workspace base currency at ECB rates; if live rates are unavailable, the total is shown per currency instead.
Click Open on any row to jump straight to the contract or vendor it refers to. If nothing needs attention, the page says so — opportunities surface automatically as you add data.
11. Activity
Sidebar → Activity
The Activity page is an audit log of what's happened in the workspace — useful for teams sharing a workspace. It lists the most recent actions (up to the latest 100), newest first, with:
- When the action happened (in UTC).
- Who did it.
- Action — a friendly, colour-coded label (e.g. Vendor created, Contract updated, Contract deleted, Contract uploaded, Renewal decision, Owner changed, Contract cancelled, Contract expired, Contract reactivated, Vendor archived, CSV import). Contracts that Kordvik ends automatically are shown as done by Kordvik.
- Item — which record it affected, with a short detail.
Actions are recorded automatically as you and your teammates work — for example creating or editing vendors and contracts, recording a renewal decision, or generating a negotiation draft. There's nothing to configure.
12. Importing data (CSV & email)
Sidebar → Import CSV
This page has two ways to bring contracts in without entering them by hand: a CSV import and a private email-in address.
CSV import
Use CSV import to add many contracts at once from a spreadsheet.
Download the template — click Download template CSV to get a pre-formatted file with the correct headers. Open it in Excel, Numbers, or Google Sheets and fill in your data.
Columns
Only vendor_name, contract_name and renewal_date are required; the rest are optional. Header names are matched case- and space-insensitively, and the column names of Kordvik's own Contracts CSV export (Vendor, Contract, RenewalDate, …) are accepted too — so an export can be imported again as-is.
| Column | Required | Format | Example |
|---|---|---|---|
| vendor_name | Yes | Text (max 200 characters) | Figma |
| contract_name | Yes | Text (max 200 characters) | Figma Pro |
| renewal_date | Yes | YYYY-MM-DD | 2026-01-01 |
| category | No | Text (blank = other) | software |
| amount | No | Number (blank = 0; 4 900,00 and $4,900.00 also work) |
1200 |
| currency | No | 3-letter ISO code (blank = workspace currency) | EUR |
| frequency | No | monthly / annual / oneoff (blank = annual) | annual |
| start_date | No | YYYY-MM-DD (blank = today; must not be after renewal_date) | 2025-01-01 |
| auto_renew | No | true / false / yes / no (blank = false) | false |
| notice_period_days | No | Whole number of days, 0–730 | 30 |
Maximum file size: 5 MB; at most 5,000 rows per import.
Import flow
- Click the file input and select your CSV file.
- A Preview appears. Every row is checked before anything is saved: the summary shows how many rows are valid and how many have problems, and each problem row lists all of its problems (e.g. "amount 'lots' is not a valid number; renewal_date is required"). Rows whose vendor + contract name already exist in the workspace, or repeat an earlier row of the file, are flagged as duplicates.
- If the import would go over your plan's contract limit, the preview says so up front — how many contracts will be imported and how many valid rows will be skipped.
- Click Import N contracts (or Import N valid contracts · skip M when some rows will be skipped) — only valid rows are imported. Cancel starts over.
- A summary appears: how many were imported, and every skipped row with its reason.
Upgrade to Team or Business to remove the contract limit.
Email a contract
Forwarding contract PDFs to a private address is shown as Coming soon until inbound email is switched on for your Kordvik installation. When it is available, the Email a contract card gives you a private address to forward contract PDFs to — each PDF attachment is turned into a contract automatically (you then review the extracted fields; low-confidence imports are flagged on the contract's risk panel). Forwarding the same email twice does not create duplicate contracts.
- Click Enable email ingestion. Kordvik generates a private address like
…@inbound.kordvik.com. - Forward (or set vendors to send) contract PDFs to that address.
- Click Regenerate address if the address is ever exposed — this invalidates the old one.
Email ingestion is managed by Editors/Admins; Viewers see a read-only note. (A separate, Admin-only option to connect a whole Outlook mailbox lives under Settings → Integrations — see section 14.)
13. Uploading a PDF contract
Sidebar → Contracts → Upload PDF
Kordvik can read a PDF contract and fill in the form for you using a local AI model. The file is processed on your own server — no third-party services are involved.
Maximum file size: 25 MB.
Steps
- Click the file input and select a PDF.
- Kordvik extracts the contract data. A loading message is shown while this runs (typically a few seconds per page).
- The Review screen appears with:
- An extraction confidence badge (green ≥ 70 %, yellow 40–69 %, red < 40 %) — lower confidence means more fields may need manual correction.
- Any warnings the extractor flagged (e.g., "renewal date unclear").
- A pre-filled form with the extracted values, including a best guess at the contract Type.
- Review and correct any fields, then click Save contract.
If extraction fails entirely, an empty form is shown with a message explaining that you can fill it in manually.
Form fields on review
All fields match those in the manual add form (vendor, contract name, type, amount, currency, frequency, auto-renew, start date, renewal date, notice period, reminders). The Notice period (days) is pre-filled when the AI found one in the contract — check the computed cancel-by date before saving. The Type is pre-selected from the AI's inference — change it if needed before saving. If Kordvik recognised a vendor name that already exists in your workspace it is pre-selected; otherwise the extracted name is placed in the New vendor name field and a new vendor is created when you save.
14. Settings
Sidebar → Settings
Settings are organised into six tabs. Most settings require the Admin role.
Workspace
Change the workspace name, currency, and timezone. The workspace slug (used in URLs) is permanent and cannot be changed. Click Save to apply changes.
Export all data (Admins only) — downloads one ZIP file with everything in the workspace, for your own records or to move to another tool (GDPR data portability):
| File in the ZIP | Contents |
|---|---|
workspace.json |
Workspace settings, notification settings, plan, connected storage/mailbox accounts |
vendors.json |
Every vendor, with tags and cached benchmark results |
contracts.json |
Every contract, including your manual edits, renewal decision and owner, its reminders, and a list of its documents |
contacts.json, notes.json |
Vendor contacts and notes |
members.json |
Members and pending invites: email, role, status, email preferences |
activity.json |
The full activity log |
files/<contract id>/…pdf |
Every stored contract document |
manifest.json |
When the export ran, and any documents that couldn't be read from storage |
Passwords, sign-in data and connection credentials (Slack/Teams/Drive/mailbox tokens) are never included. Each export is recorded in the activity log, and you can run a few exports every 15 minutes.
Members
Member list — everyone with access is listed with their email, role, and status (Active or Pending invite). Admins can change an active member's role using the dropdown in the Role column.
Invite a member — click Invite member, enter the person's email, select a role (Admin, Editor, or Viewer), and click Send invite. Kordvik sends an invitation email with a link; if email isn't configured, the link is shown on screen to share manually. To cancel a pending invite, click Revoke in that row. (See the invitee's side in section 4.)
Plan limits restrict how many members a workspace can have (see section 16).
Notifications
My notifications (every member, any role) — your own email preferences for this workspace:
- Email me renewal reminders — switch off to stop getting reminder emails from this workspace.
- Email me the weekly briefing (Admins) — switch off to stop getting the weekly briefing.
Every reminder and briefing email also has an Unsubscribe link at the bottom. It opens a page that asks you to confirm, then switches that kind of email off for you. Switch it back on here at any time.
Email reminders (Admins)
- Send renewal reminders by email — reminder emails go out on each contract's scheduled reminder dates, to every Admin of the workspace.
- Also notify contract owners — the member set as a contract's Owner gets its reminders too, whatever their role. On by default.
- Send a weekly briefing — Admins receive a Monday morning email covering upcoming renewals, decisions, risks, benchmark flags, and savings. Click Send me a preview now to queue one immediately.
Anyone who has switched an email off under My notifications (or unsubscribed) doesn't get it.
Slack — connect a Slack workspace to post reminders to a channel: click Connect via OAuth (if configured) or paste a bot token, pick the channel, Save channel, and Send test message to verify. Disconnect removes it. Requires the Business plan.
Microsoft Teams — paste an Incoming Webhook URL from a Teams channel, click Save, and test with Send test message. Requires the Business plan.
Integrations
Connect cloud storage so any PDF dropped there is automatically ingested as a contract. Three services are supported — Google Drive, OneDrive, and SharePoint — all on the Business plan.
- Click Connect Google Drive (or OneDrive / SharePoint).
- For Google Drive / OneDrive: complete the OAuth flow, then Pick folder.
- For SharePoint: load sites → pick a site → load libraries → pick a library → pick a folder.
A sync runs automatically every hour. Use Sync now for one connection, or Sync all connections (top right) for all of them. Disconnect removes a connection.
Outlook mailbox — you can also connect an Outlook / Microsoft 365 mailbox so any email with a PDF attachment is auto-ingested. Connecting and disconnecting both require the Admin role. Click Connect Outlook mailbox, complete the Microsoft sign-in, and the card shows the account and whether its subscription is active; Disconnect removes it.
Billing
Shows your current plan, its status, and your invoice history.
Switch plans
| Plan | Users | Contracts | Slack & Teams | Drive sync |
|---|---|---|---|---|
| Free | 1 | 25 | No | No |
| Team | 5 | 100 | Yes | No |
| Business | Unlimited | Unlimited | Yes | Yes |
Click Switch to [Plan] to change. Downgrades take effect immediately; upgrades redirect to Stripe checkout for payment.
Invoices — past invoices show date, description, amount, and status. Click Manage payment method to update your card in the Stripe portal.
Danger zone
An Admin can permanently delete the workspace and everything in it (vendors, contracts, contacts, notes, reminders, invoices):
- Click Delete workspace.
- Type the workspace name exactly as shown to confirm.
- Click Delete forever.
This cannot be undone. To keep a copy of your data, use Export all data on the Workspace tab first.
15. Roles and permissions
Every member of a workspace has one of three roles.
| Action | Admin | Editor | Viewer |
|---|---|---|---|
| View vendors, contracts, renewals, reports, savings, activity | Yes | Yes | Yes |
| Add / edit / delete vendors | Yes | Yes | No |
| Add / edit / delete contracts | Yes | Yes | No |
| Mark contracts cancelled / reactivate them | Yes | Yes | No |
| Archive / unarchive vendors | Yes | Yes | No |
| Add / remove contacts and notes | Yes | Yes | No |
| Add / remove reminders | Yes | Yes | No |
| Record a renewal decision | Yes | Yes | No |
| Run AI risk review / benchmark / draft negotiation | Yes | Yes | No |
| Import CSV / enable email-in | Yes | Yes | No |
| Upload PDF | Yes | Yes | No |
| Add / delete contract documents | Yes | Yes | No |
| Open contract documents | Yes | Yes | Yes |
| Export accounting CSVs | Yes | Yes | No |
| Export all workspace data (ZIP) | Yes | No | No |
| Manage your own email notifications | Yes | Yes | Yes |
| Invite / revoke members | Yes | No | No |
| Change member roles | Yes | No | No |
| Change workspace settings | Yes | No | No |
| Configure notifications and integrations | Yes | No | No |
| Connect / disconnect an Outlook mailbox | Yes | No | No |
| Switch billing plan | Yes | No | No |
| Delete workspace | Yes | No | No |
The first person to create a workspace is automatically an Admin. Subsequent members receive the role chosen at invite time and can be promoted or demoted by any Admin at any time.
16. Plans and limits
| Free | Team | Business | |
|---|---|---|---|
| Members | 1 | 5 | Unlimited |
| Contracts | 25 | 100 | Unlimited |
| Email reminders | Yes | Yes | Yes |
| Slack + Teams | No | Yes | Yes |
| Drive sync | No | No | Yes |
When a limit is reached:
- Contracts — the Add manually button and the Upload PDF flow are disabled. The Import CSV preview warns before importing when rows would exceed the limit; those rows are skipped and listed.
- Members — the Invite member button is disabled and the invite modal explains the limit.
To increase limits, go to Settings → Billing and switch to a higher plan.
17. Platform administration (operator-only)
This section is for the platform operator who runs the Kordvik instance (the Platform admin role), not for ordinary workspace members. If you don't have the role, you won't see these screens — and an attempt to open
/adminshows an "Access denied" page.
Platform admins get a separate admin area with its own sidebar (Overview, Users, Background jobs, plus Back to app and Sign out).
Overview (/admin)
- Top cards: total Workspaces, Users, and Contracts across the whole instance.
- A workspaces table (name/slug, plan, members, contracts, created date, status). For each workspace you can:
- Change the plan via the dropdown.
- Suspend / Unsuspend it (a suspended workspace is frozen — members see the suspended page and its background jobs are skipped).
- Delete it: click Delete, type the exact workspace name, then Confirm delete.
- Manage users → opens the Users screen.
Users (/admin/users)
A table of every account (email, confirmed, workspace count, platform-admin status, active/deactivated). For each user you can Make admin / Revoke admin and Deactivate / Reactivate. You can't revoke your own platform-admin or deactivate yourself. Deactivating a user ends their existing sessions shortly afterwards.
Background jobs (/hangfire)
The Background jobs link opens the Hangfire dashboard, where recurring jobs (reminders, weekly briefing, drive sync, invoice generation, FX refresh) can be inspected. It's restricted to admins.
18. System & error pages
You may occasionally land on one of these built-in pages:
- Not found — the workspace or page doesn't exist, or you're not a member of it. Use Back to home.
- Workspace suspended — your workspace is temporarily suspended by a platform admin (see section 4).
- Access denied — you're signed in but lack permission for that resource (for example, a non-admin opening
/admin). - Error — something went wrong processing the request; use Reload. (In development, extra diagnostic detail and a request ID are shown.)