A build-to-order ERPNext application that turns each trip into a booking file — travelers, supplier confirmations, costs and receipts in one submittable document with live margin. ECOSIRE builds, installs and supports it on your ERPNext v15 or v16 instance. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA build-to-order ERPNext application that turns each trip into a booking file
— travelers, supplier confirmations, costs and receipts in one submittable document with live margin.
ECOSIRE builds, installs and supports it on your ERPNext v15 or v16 instance.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your ERPNext.
You go live in about 2–4 weeks, with a post-launch support window.
A travel agency does not sell a stock item. It assembles a file: two air segments from a consolidator, four hotel nights from a bed bank, a transfer, a visa, insurance — each with its own supplier, its own confirmation reference, its own payment terms and its own cancellation deadline. ERPNext handles the money side of that well once it exists as a Sales Invoice and a set of Purchase Invoices, but nothing in ERPNext core holds the file together. There is no DocType where a traveler list, a PNR, five supplier confirmations and a client quotation live as one record, so agencies run the operation in spreadsheets and only tell ERPNext what happened after the trip departed. The predictable result: nobody can answer "what did file TRV-2481 actually make?" until month-end, and supplier statements get reconciled by eye.
We build a proper Frappe app — travel_agency_operations, its own module, installed with bench get-app and bench --site install-app, never a pile of Custom Fields bolted onto Sales Order. The spine is a Booking File DocType with child tables for Traveler (name as per passport, document number, expiry, ticket or voucher number) and Booking Service (service type, supplier, confirmation reference, service dates, cost currency and amount, sell amount, cancellation deadline). Each Booking Service row links to the ERPNext Supplier and, once confirmed, to the Purchase Invoice that recognises the payable — so the file is never a parallel ledger, it is a controller over standard accounting documents. Package costing is computed in the Booking File server-side controller: cost lines convert at the exchange rate captured on the service date, markup applies per service or per file according to a Travel Settings single DocType, and gross margin, margin percent and unbilled cost are stored as read-only fields you can group and report on in the ERPNext query report builder.
Technically the app leans on Frappe rather than fighting it. Document events registered in hooks.py (validate, on_submit, on_update_after_submit) enforce the rules that actually cause losses — a file cannot be submitted with a service priced below cost unless a user holding the Travel Manager role overrides it, and a supplier confirmation reference is mandatory before a service moves to Confirmed. A scheduler_events daily job scans open files for cancellation deadlines falling inside a configurable window and raises ToDos plus an email digest to the file owner, which is the single control that stops silent no-show charges. Client Scripts on the Booking File form give the consultant an inline margin panel and a one-click Sales Invoice action that pulls only services flagged billable. Whitelisted methods (@frappe.whitelist()) expose file creation, service confirmation and status lookup over the Frappe REST API so a GDS bridge, a B2B portal or a messaging bot can push confirmations in without touching the desk; every endpoint runs under standard Frappe permission checks, and we ship Role Profiles for Travel Consultant, Travel Manager and Accounts with permlevel restrictions so a consultant can build files but never edit a submitted supplier cost.
Supplier and BSP reconciliation is its own DocType. A Supplier Statement Import accepts the BSP/ARC or bed-bank statement as CSV or XLSX, matches lines against Booking Service rows on confirmation reference and ticket number, and produces three buckets — matched, amount-variance and unmatched — with a Reconcile action that posts accepted lines against the corresponding Purchase Invoices and routes the variance to a configurable expense account. Nothing posts silently: every reconciliation run leaves an audit record naming the user, the source file and the resulting GL entries. Customer documentation uses Frappe Print Formats and Letter Heads — itinerary, service voucher and traveler-level ticket summary — generated from the same file, so what the client receives and what the accounts show cannot drift apart.
This is build-to-order, and we are explicit about what that means. There is no download button; there is a scoping call. We walk your current desk workflow, your supplier mix, your statement formats and your ERPNext version, agree a written scope, then build against that scope, test on a staging site restored from your data, and hand over with source. Typical delivery is two to four weeks from confirmed scope, depending on how many statement formats and integrations are in play. You receive the git repository, so the app is yours to keep, fork and extend whether or not you continue with us.
Sells packages assembled from many suppliers and cannot see true file-level profit until long after departure. Needs margin computed on the file itself, visible before the client is invoiced, and a defensible number at month-end rather than a reconstructed spreadsheet.
Runs the desk: chases supplier confirmations, watches cancellation deadlines, and rebuilds the same trip data three times across email, spreadsheet and the ERP. Needs one booking file holding traveler details, supplier confirmations and deadlines together, with automated warnings before a free-cancellation window closes.
Reconciles BSP/ARC and bed-bank statements against agency records line by line, and inherits payables that were never raised. Needs statement import with reference matching, controlled posting against Purchase Invoices, an explicit variance account and a full audit trail of every reconciliation run.
Already runs ERPNext for accounting and will not accept another disconnected system or Custom Field sprawl. Needs a real Frappe app with its own DocTypes, hooks, patches and fixtures that survives `bench migrate` and upgrades from v15 to v16 without hand-repair.
| Criterion | ECOSIRE | Custom Build | Competitor | ERPNext Native |
|---|---|---|---|---|
| Booking file as a first-class record | Purpose-built `Booking File` DocType with traveler and service child tables, submittable and auditable | Achievable, but the data model is designed from scratch on your budget and timeline | Often a lighter booking form; child-table depth and workflow vary by publisher | No such concept — the closest fit is a Sales Order, which has no traveler or supplier-confirmation dimension |
| Per-file profitability | Margin and margin percent computed in the controller and stored as reportable fields, visible before invoicing | Whatever your developer builds; commonly deferred to reporting rather than enforced in the document | Usually reported after the fact from linked invoices, not held on the file | Reconstructed at period end by matching Sales and Purchase Invoices by hand |
| Supplier and BSP reconciliation | Statement import with reference matching, three-bucket triage, controlled posting and a per-run audit record | Buildable, but statement-format mapping is usually the part cut for time | Rarely included; where present, typically one fixed format | Manual comparison of supplier statements against Purchase Invoices |
| Cancellation-deadline control | Daily scheduler job raising ToDos and an email digest before free-cancellation windows close | Depends entirely on whether it was specified before the budget ran out | Sometimes a date field; automated pre-deadline alerting is uncommon | No deadline concept exists for supplier services |
| Fit to your desk workflow | Scoped against your actual supplier mix, statement formats and roles before a line is written | Fully yours, at the cost of specifying and testing everything from zero | You adapt your process to the publisher's assumptions | Generic sales and purchase flows, not travel-specific |
| Upgrade path to v16 | Patches and fixtures shipped with the app; built against your exact version and migrated with `bench migrate` | Depends on whether the original developer is still available | Tied to the publisher's release cadence for your version | Core upgrades are clean, but any Custom Field workarounds you built are yours to repair |
| Integration surface | Whitelisted API methods under standard Frappe permission checks, ready for a GDS, portal or bot | Whatever is built; permission handling is a common weak point | Varies; often UI-first with a thin or undocumented API | Generic Frappe REST API over core DocTypes, with no travel semantics |
| Ownership and lock-in | Full git repository at handover, no licence key, no phone-home check | You own it outright, having funded the entire build | Typically a per-site licence with renewal terms | Included with ERPNext, but nothing travel-specific to own |
It is not a download — this is built to order. After a scoping call we agree a written scope, then build, test and install the app on your ERPNext instance. Typical delivery is two to four weeks from confirmed scope. Builds with several supplier statement formats or a GDS/consolidator integration sit at the longer end; a straightforward booking-file and costing build sits at the shorter end. You get a dated plan before any work starts.
We build against Frappe/ERPNext v15 and v16, and specifically against your running version rather than the newest release. If you are on v15 today and plan to move to v16, say so at scoping — we ship patches and fixtures so the app migrates with `bench migrate` instead of needing rework. It installs on Frappe Cloud, a self-hosted bench, or your own Docker deployment.
Every build includes a post-go-live support window for defect fixes on the delivered scope, with a named channel and agreed response times. After that window you can take an ongoing support and maintenance agreement covering version upgrades, or continue on your own — you hold the full git repository and the app is standard Frappe code, so any competent Frappe developer can maintain it. New features beyond the agreed scope are quoted separately.
Neither. The app is a controller over standard ERPNext documents, not a parallel ledger. Booking services create and link to normal Purchase Invoices for supplier payables, and billable services flow into a normal Sales Invoice. Your Chart of Accounts, tax templates, payment entries and financial statements stay exactly as they are — the app only ensures the right documents are created against the right file, with margin visible before you invoice.
Yes, that is a core part of the build. The `Supplier Statement Import` DocType accepts CSV or XLSX and matches lines against booking services on confirmation reference and ticket number. Because every consolidator and bed bank formats statements differently, we map your actual formats during scoping — send us two or three real statements and the mapping is built and tested against them. Additional formats added later are a small scoped change.
Yes. File creation, service confirmation and status lookup are exposed as whitelisted methods over the Frappe REST API, authenticated with a standard API key and secret and executing under normal Frappe permission checks, so an external system has exactly the rights of the role it authenticates as. We do not ship a GDS connector in the base build — if you need one for a specific provider we scope it as an integration alongside the core app.
Yes. You receive the git repository with full history at handover. The app is yours to keep, fork, extend or hand to another developer. There is no runtime licence key, no phone-home check, and no mechanism by which the app stops working if you stop working with us.

A finite-capacity, constraint-aware production scheduler for ERPNext that turns Work Orders and Job Cards into a live, drag-and-drop Gantt plan respecting machine, labor, and material availability. Built to order, installed, and supported by ECOSIRE.

A build-to-order ERPNext app for commercial farms and agribusiness that turns crop cycles, land plots, input usage, and harvest yields into structured DocTypes and traceable records. ECOSIRE scopes, builds, installs, and supports it — it is not an instant download.

A build-to-order Frappe app that captures supplier invoices, receipts, and POs via AI/OCR and turns them into draft ERPNext Purchase Invoices and Expense Claims — with line-item, tax, supplier, and item auto-matching. ECOSIRE scopes, builds, installs, and supports it for you.

A build-to-order AI layer for ERPNext manufacturing that predicts asset failures, recommends optimal production schedules, and surfaces quality anomalies from your Work Order, Job Card, and machine sensor data. ECOSIRE builds, installs, and supports it on your v15/v16 bench.
A build-to-order ERPNext application that turns each trip into a booking file — travelers, supplier confirmations, costs and receipts in one submittable document with live margin. ECOSIRE builds, installs and supports it on your ERPNext v15 or v16 instance.