FreelyForm

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

FieldWhy it is mandatory
Item or serviceWhat is being bought.
Estimated costWhich threshold and which approver.
Budget or cost centreWhether there is money for it.
Requested by and dateThe paper trail, recorded automatically.
ApproverWho is expected to say yes.
JustificationOne sentence, not an essay.
HTML
<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.

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