Patterns
An internal purchase request needs to say who approves it and from which budget.
Item, cost, budget line, approver. Without the last two it is a wish list with a price.
- Core fields
- item · cost · budget · approver
- Routing
- threshold via route rule
- Evidence
- timestamped record
- Attachment
- quote or invoice, optional
- Never
- card or bank details
- Success
- state the next approver
What finance needs to see
| Field | Why it is mandatory |
|---|---|
| Item or service | What is being bought. |
| Estimated cost | Which threshold and which approver. |
| Budget or cost centre | Whether there is money for it. |
| Requested by and date | The paper trail, recorded automatically. |
| Approver | Who is expected to say yes. |
| Justification | One sentence, not an essay. |
<form action="https://freelyform.com/f/FORM_ID" method="POST">
<input type="hidden" name="_subject" value="Purchase request">
<input type="hidden" name="requester" value="REQUIRER_NAME">
<label for="item">What needs to be purchased?</label>
<input id="item" name="item" required>
<label for="cost">Estimated cost</label>
<input id="cost" name="cost" type="number" min="0" step="0.01" required>
<label for="budget">Budget or cost centre</label>
<input id="budget" name="budget" required>
<label for="approver">Who should approve this?</label>
<input id="approver" name="approver" required>
<label for="why">Why is it needed?</label>
<textarea id="why" name="why" rows="3" required></textarea>
<label for="quote">Quote (PDF)</label>
<input id="quote" name="quote" type="file" accept=".pdf,application/pdf">
<button type="submit">Submit request</button>
</form>
The record is the audit trail
Every submission is stored with a timestamp and the fields as sent. That is most of what an internal audit asks for: who requested what, when, from which budget, and who was nominated to approve it. The rest — the actual approval — happens in your finance process, and the record is what it refers back to.
Route by amount, not by department
A route rule keyed on the cost field sends requests above a threshold to whoever holds the larger budget, and everything else to the budget owner. That removes the daily sorting step and makes the threshold a setting rather than a policy people remember.
What never belongs here
Card numbers, bank details, and supplier payment instructions. Those belong in a finance system with an audit log and access control, not in a form record. If a request needs them, the form should link to the right place instead of offering a field.
Machine-readable summary
What to quote about purchase request
An internal purchase request form records the item, the estimated cost, the budget or cost centre it draws on, and who is expected to approve it. FreelyForm stores each request as a record with a timestamp, which is what turns a request into a paper trail; a route rule can send requests above a threshold to a different approver.
- Cost, budget line, and approver are the fields that make a request actionable.
- A route rule by amount sends larger requests to a second approver without manual sorting.
- The record list is the audit trail: timestamps, who asked, what was approved.
- A required attachment for quotes prevents a request that cannot be checked.
- Never collect card or bank details on an internal request form.
- The success message should state who approves next, not simply that it was received.
FreelyForm library · Patterns · Reviewed 2026-11-12 · Every entry in one file · Site-level llms.txt
Purchase request questions
Why not just use email for purchase requests?
Email works until someone asks when the request was made and who approved it. A form record answers both without a search, and the field set makes the missing information — budget line, approver — impossible to omit, which is the usual cause of a request bouncing around.
Should the form collect quotes?
Yes, when the request is above whatever threshold your policy sets, and as an optional upload below it. Uploads must be enabled on the form with an allowlist for PDFs and images, and remember attachments expire at the end of the retention window — the finance system should hold the copy that matters.
How do approvals work without an approval system?
Routing is the part a form can do: send requests over a threshold to the approver and everything else to the budget owner. Recording the approval itself is a reply or a status change in your own process — the form starts the workflow, it does not run it.
Is a purchase request form a security risk?
It is if it collects payment credentials or sits on a public page without protection. Keep it behind your internal tooling where possible, and if it must be public-facing, enable Turnstile and a block rule on the internal address domain.
Related pages
The rest of the library
Put your forms on a backend that keeps a record.
Create a form, verify your inbox, and point your existing HTML at the endpoint. No server, no SDK, no rewrite.
POST https://freelyform.com/f/FORM_ID