Building analytics engineering solutions that transform scattered operational data into reliable, decision-ready insights.
What we do
We eliminate the manual work sitting between your raw data and the decisions your team needs to make, using the tools you already own wherever possible.
End-to-end NetSuite services for businesses that need more from their ERP, whether you have just gone live or planning to expand and optimise what's already live.
Replace manual ERP exports and copy-paste routines with automated, always-fresh dashboards, built on infrastructure your team already pays for.
From margin deep-dives to live BI dashboards, we build the analytical layer that turns your financial and operational data into clear, confident decisions.
The challenge
A heritage hospitality and restoration company running multiple active sites was processing vendor invoices manually. Invoices arrived in every format: clean PDFs from established contractors or phone-camera photos of handwritten bills. Each one had to be opened, read, manually keyed into a tracking sheet, and routed for approval.
Different people extracted different fields in different formats. Approval happened informally over chat. There was no point where a malformed or incomplete invoice got caught before it entered the books, and for a finance function where a vendor billing at 93% project completionActual case stat: a vendor billed at 93% completion but had only been paid for 49% but paid for only 49% of it is real leakage, that intake gap was itself a risk.
Why off-the-shelf wasn't enough
Generic invoice-extraction tools assume one input shape: a clean, machine-readable document. That assumption breaks the moment a site engineer photographs a handwritten receipt. A text-based PDF has a structured data layer, the job is extraction. A photographed note has no text layer, the job is visual interpretation under uncertainty, requiring a vision-capable model, not a parser.
Treating both the same way over-engineers the easy case or under-serves the hard one. The architecture had to branch on input type at the first decision point.
The solution
A single automated pipeline built using n8n workflow takes over from the moment an invoice email lands.
A Gmail trigger watches for incoming invoice emails. Each attachment is archived to Google Drive immediately, then a routing check determines: structured PDF, or image?
PDFs → text extraction + AI agent constrained by a structured output parserForces the model to return data conforming to an exact schema, consistent field names, consistent types, every time, ensuring consistent field names and types. Images → vision-capable LLM chain with prompt engineering tuned to handwritten and photographed formats.
Both paths run a check before anything is written. Failure means a human-readable alert email flagging exactly what went wrong, not a quiet data quality problem surfacing three weeks later during reconciliation.
Data that passes validation gets split into line items, converted to an Excel register, uploaded to Drive, and routed for approval via "Send and Wait for Response" email. Nothing reaches the books without a person confirming it.
Design decisions that mattered
Match the extraction method to the actual input quality, not to a uniform AI approach. Splitting the paths lets each use the right tool for its actual problem.
Build to fail loud. Early versions had no validation gate after extraction, bad data would have flowed straight into the register with no one aware. Adding explicit null and format checks tied to automatic alert emails means a failure produces a notification, not a data quality time-bomb.
Keep humans in the loop at the points that matter. For a process tied directly to vendor payments, a human confirmation step isn't a gap in automation, it's the control point that makes the automation trustworthy enough to actually use.
The challenge
A finance analyst at a multi-property hotel group was spending three hours every morning running the same routine: log into NetSuite, pull each report, copy the data into a master Excel file, and email it out to 12 department heads. By the time it landed in inboxes, the data was already four hours old, and the analyst's morning was gone.
The finance lead flagged it as a real cost: a skilled analyst burning 15 hours a week on work a scheduled job should do. The obvious fix was NetSuite's SuiteAnalytics Connect add-on, which would allow direct live queries into the Excel dashboard. The CFO wouldn't approve it, the add-on licence ran to several thousand dollars a year for a capability the team needed for one use case. The team was stuck between wasting analyst time and making decisions on stale data.
The solution
A zero-cost automation connecting NetSuite directly to their existing Excel MIS report, using only Microsoft 365 tools they already owned.
NetSuite configured to email four daily report snapshots to a dedicated mailbox on a fixed schedule. No new licences, no new integrations, just an existing email feature used deliberately.
A Power Automate flow detects these emails, extracts the data, and overwrites the old file in SharePoint, without breaking a single existing Excel formula or pivot table.
The Finance team continues to use the exact same Excel dashboard they've always used. The file replacement is invisible. They open SharePoint and see fresh numbers.
Why this approach
The constraint wasn't technical, it was political and budgetary. Any solution requiring new licences, new tools, or changes to how the Finance team worked was dead on arrival. The brief was: deliver live data, using only what's already paid for, without touching the dashboard the team knows.
That constraint turned out to be a feature. By routing through Microsoft's native ecosystem rather than adding a middleware layer, the solution has fewer dependencies, fewer points of failure, and no vendor risk if the $5k ODBC provider changes pricing.
The ROI math was simple: the first week reclaimed enough finance lead hours to justify the engagement. Over 12 months, the saved administrative time represents over $12,000 in reclaimed salary cost, not counting the value of decisions made on hours-old data rather than days-old.
Stack
"You don't need expensive middleware to get live ERP data into Excel."
Engagement summary, Case 02
The challenge
Across six active heritage and development sites, daily progress and material data arrived in whatever format was closest at hand: a localized Excel sheet, a handwritten site register, a WhatsApp message. Nothing was standardized, which meant nothing could be reliably compared.
The real cost showed up downstream. Material lists, labor counts, and work order trackers didn't line up across site engineers, vendors, architects, and corporate finance, creating blind spots that made billing discrepancies hard to catch and even harder to prove. Reliance on manual reconciliation meant delayed payments, unverified vendor terms, and audits that took far longer than they should have.
Methodology
We treated this as a full-stack operations problem: keep the field input as low-friction as possible, use AI to turn free-form emails into structured data automatically, persist it in a real database, and surface it in a dashboard people would actually use.
Rather than forcing a new tool onto the field, site engineers kept doing what they already did: sending a plain email with the day's progress, material usage, and labor counts. No app to learn, no form to fill out, no reason to fall back on a handwritten register.
Incoming emails are parsed with AI to extract structured fields, quantities, materials, labor counts, site references, even when phrasing and format vary from one engineer to the next, and written automatically into Google Sheets. From there, a custom-engineered SQLite backend and programmatic cleaning pipeline normalized the data across all six sites, so an entry from one site and one from another could finally be compared on equal terms.
An interactive Streamlit dashboard surfaced daily operational metrics for project heads and finance, deployed on Streamlit Cloud with a GitHub Actions CI/CD workflow so updates rolled out automatically rather than through manual redeploys. Excel-based DPR trackers and reconciliation tools were kept in parallel during rollout, giving stakeholders a familiar bridge into the new system.
With clean, searchable data in place, material reconciliation surfaced vendor billing discrepancies that manual tracking had missed, directly saving 4,50,000 INR. Orders, verified bills, and updated payment terms with major vendors were tracked against formal Data Management SOPs and structured Minutes of Meetings with key project partners.
Why this matters beyond construction
The technical pipeline only worked because of how it was rolled out. Frontline adoption came from removing friction entirely, engineers kept sending emails the way they always had, while the AI did the work of structuring it. That meant no retraining, no resistance, and no reason to revert to a handwritten register. Labor count disputes that once meant flipping through physical registers became near-instant digital searches, and that immediate, visible benefit is what drove organic adoption rather than mandated compliance.
The same pattern applies anywhere field operations feed corporate decisions: retail chains, logistics fleets, multi-site service businesses. The instinct is the same as in Fynsignal's other automation work: meet people where they already are, and let automation absorb the complexity instead of pushing it back onto the field.
The challenge
The client ran procurement across multiple countries, with approvers at every level, Supervisors, Function Heads, Department Heads, Finance, sitting in different geographies and time zones. Every vendor bill, whether raised directly or converted from a Purchase Order, needed the right sign-offs based on the amount, the creator's role, and the business unit.
None of this was enforced in any system. Approvals happened over email threads. A bill landed in someone's inbox in Singapore, sat over a long weekend, got forwarded to the wrong person in London, and arrived with the Finance team a week later with no trace of who had seen it or when. The finance lead described it plainly: chasing approvals was eating more time than the actual payments work.
The solution
We built a NetSuite SuiteFlow workflow, the Vendor Bill Approval Workflow (Global), that enforces a dynamic, multi-level approval chain on every vendor bill creation or update. The path a bill takes depends on its amount, whether a PO exists, and who created it.
Triggered on create or update of any Vendor Bill.
The bill creator's designated approver reviews first, then routes to the Country Head based on subsidiary or location, ensuring the right country's authority is always in the loop, not a blanket global approver.
Triggered conditionally by amount threshold. Bills crossing defined values traverse these levels. Lower-value bills skip levels entirely, senior approval time is spent where it genuinely matters.
Final Finance review, verifies GL coding, tax mapping, and PO matching before the bill is approved and available for payment.
Any approver at any stage can reject. The workflow routes through a mandatory Rejection Reason step, storing the reason permanently on the bill record, no more context lost in email threads.
Design decisions that mattered
Email notifications at the moment of routing, not as a reminder. Each approver gets an automated email the instant the bill reaches their stage, with a direct link to the record. An approver in Dubai doesn't need to be chased, they see it as soon as it's their turn. This is the single biggest reason the approval cycle dropped from a week to under 24 hours.
Rejection captures the reason, not just the decision. Early approval workflows typically stop at a reject button. This one routes through a Rejection Reason step, the approver must log why before the bill is marked rejected. That reason sits on the Vendor Bill record permanently.
Exclusions built in at the condition level. Recurring bills and Europe Portfolio bills are excluded by condition, preventing double-workflow conflicts without requiring manual intervention.
Before vs after
Most engagements start with a 30-minute call to map the manual work your team is doing. That's usually enough to know if your team needs automation.