Automating travel expense approvals with scripting versus manual workflows

Our finance team is evaluating whether to automate travel expense approvals using custom scripting or stick with the standard manual workflow in D365 Finance. Currently, managers manually review and approve each expense report, which takes 3-5 days on average but provides clear audit trails and allows for nuanced judgment calls.

We’re considering scripting to auto-approve expenses under certain thresholds (e.g., under $500 with receipts) and route only exceptions to managers. The appeal is obvious - faster reimbursements and reduced manager workload. However, I’m concerned about maintaining the scripts as business rules evolve, handling edge cases, and ensuring we don’t lose the audit simplicity we currently have.

For those who’ve implemented automated approval workflows, what’s been your experience? Did scripting actually reduce approval times significantly, or did exception handling and maintenance overhead negate the benefits? How do you balance speed with proper controls and user training requirements?

Both paths are viable in D365 Finance — the decision hinges on your policy complexity, IT capacity, and tolerance for maintenance overhead.

Criteria Comparison

Criteria Custom Scripting (X++ / Business Events) Standard Workflow Engine (Workflow Editor)
Setup complexity High — requires developer resources Low-Medium — config-driven, no-code
Audit trail Manual instrumentation required Native, built into Workflow History
Rule flexibility Very high — arbitrary logic possible Moderate — condition branching, limited nesting
Maintenance burden High — breaks on schema changes, upgrades Low — survives most platform updates
Exception routing Custom-built Native escalation and delegation
User visibility Depends on implementation Standard My Work Items / notifications
Threshold-based auto-approval Fully custom Supported via workflow conditions natively
Compliance posture Depends on implementation quality Pre-validated by Microsoft

Key Considerations

On scripting: X++ automation against TrvExpTable and TrvExpTrans can absolutely enforce threshold rules, but you’re building a mini-approval engine yourself. Every policy change — new categories, currency thresholds, per-diem adjustments — requires a developer touch. More critically, auto-approval logic that bypasses the workflow engine can create SOX/internal audit gaps unless you explicitly write approval decisions to TrvExpReport status fields and a custom log table. That’s non-trivial to get right and even harder to demonstrate to auditors. Verify in your version whether Business Events or Power Automate connectors give you a middle path that avoids raw X++.

On standard workflow: The native workflow engine in Expense management > Setup > Workflows supports conditional auto-approval steps using spending limits. You can configure an auto-approve branch for reports under your $500 threshold with attached receipts, routing only exceptions upward. The Workflow History pane gives auditors a complete, tamper-evident record with zero custom code. The constraint is that complex multi-variable logic (e.g., project type + employee grade + policy exception flags combined) gets unwieldy in the graphical designer.

On the hybrid approach: Many implementations land here — workflow engine handles routing and audit, a lightweight batch job or Power Automate flow pre-validates receipts and flags anomalies before the workflow fires. This keeps audit integrity inside Microsoft’s framework while offloading pre-screening logic to a more maintainable layer.

User training delta is also real. Scripts operating silently frustrate submitters who don’t understand why a report was auto-approved or held. Native workflow notifications and Action Center integration handle this out of the box.

Ultimately, this depends on context — specifically your internal audit requirements, developer availability for long-term maintenance, and whether your threshold rules are stable enough to trust automation without frequent rework.


This draft is based on general Microsoft Dynamics 365 knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

We implemented a hybrid approach last year. Auto-approve routine expenses (under $300, common categories, receipt attached) and manual review for everything else. The approval time for routine expenses dropped from 4 days to same-day processing, which employees love. However, you’re right about maintenance - we’ve had to adjust the rules three times in 10 months as policies changed. Make sure you have someone who can modify the scripts quickly, or you’ll create bottlenecks when rules need updates.

From an audit perspective, automated approvals are fine IF you have comprehensive logging and periodic review processes. The key is ensuring every auto-approval decision is logged with the criteria that triggered it, and someone reviews a sample of auto-approved expenses quarterly. Manual workflows are inherently auditable because there’s human judgment documented at each step. With scripting, you need to build that auditability in deliberately. Don’t sacrifice audit trail simplicity for speed - you’ll regret it during your next external audit.

One thing often overlooked: exception handling complexity. Our scripted approval system works great 85% of the time, but that other 15% creates confusion. Expenses that get kicked out of auto-approval often sit longer than they would have in the old manual queue because managers aren’t monitoring exception queues as closely. We’ve had to implement email alerts and dashboard notifications to ensure exceptions don’t fall through cracks.

User training is also critical. Employees need to understand what triggers auto-approval versus manual review, or they get frustrated when some expenses process instantly and others take days. We created a simple decision tree guide that helped significantly.

These are exactly the concerns I had. Carlos, how did you handle the transition period? Did you run both systems in parallel initially, or switch cold turkey? I’m worried about user confusion during the changeover.

We did a phased rollout by department. Started with IT department (naturally) where employees were comfortable with the concept, then expanded to other departments quarterly. This gave us time to refine rules and train managers on exception handling before full deployment. Each phase included lunch-and-learn sessions and written guidelines. The gradual approach definitely increased adoption success and reduced support tickets.

Consider the types of travel expenses your company typically has. If you have a lot of international travel with currency conversions, per diem calculations, and complex receipt requirements, scripting gets complicated fast. Our auto-approval rules work well for domestic travel but international expenses still need manual review due to policy variations by country. Set realistic expectations about what percentage of expenses can truly be auto-approved.

After implementing automated approvals for 14 months, here’s my comprehensive perspective on the three key considerations you raised:

Manual Entry Simplicity vs Audit Complexity: You’re absolutely right that manual workflows are inherently simple to audit - there’s a clear approval chain with manager judgment documented at each step. When we moved to scripted automation, we had to deliberately build in auditability that was previously automatic. Here’s what worked:

  • Implement detailed logging for every auto-approval decision, capturing the specific criteria that were evaluated (receipt present, amount threshold, category validation, policy compliance checks)
  • Create monthly audit reports showing all auto-approved expenses with key decision factors
  • Maintain a manual review sample - our auditors examine 10% of auto-approved expenses quarterly to validate the logic is working correctly
  • Document your approval rules in a version-controlled repository so you can demonstrate what rules were active at any point in time

The audit trail is actually MORE comprehensive now, but it requires intentional design. Don’t assume automation means less audit work - it shifts the audit focus from individual transactions to system logic validation.

Approval Time Reduction vs Maintenance Overhead: The time savings are real but come with ongoing maintenance costs. Our metrics after 14 months:

  • Routine expenses (67% of total volume): 4.2 days → 0.3 days average approval time
  • Exception expenses (33% of volume): 4.2 days → 2.1 days (faster because managers focus only on items needing judgment)
  • Overall average: 4.2 days → 1.3 days (69% improvement)

However, maintenance overhead is significant:

  • We’ve modified approval rules 7 times (policy changes, threshold adjustments, new expense categories)
  • Each rule change requires testing across multiple scenarios before deployment
  • Budget 4-6 hours per month for rule maintenance and testing

The key is having someone with both business process knowledge AND scripting skills who can make changes quickly. If rule changes require external consultants or lengthy IT tickets, the maintenance overhead can negate time savings.

Exception Handling and User Training: This is where many automation projects stumble. Our lessons learned:

  • Build robust exception queues with clear visibility for managers - we use Power BI dashboards showing pending exceptions with aging indicators
  • Implement proactive notifications - managers get daily emails listing exceptions requiring review, not just when items are routed to them
  • Create clear user documentation explaining what triggers auto-approval versus manual review (we use a simple flowchart that employees reference when submitting expenses)
  • Train managers on their new role: instead of reviewing every expense, they’re now exception handlers and system oversight

User training shouldn’t be one-time. We do quarterly refreshers highlighting common mistakes and rule changes. The first three months had elevated support tickets as users learned the system, but it stabilized after that.

My Recommendation: Go hybrid, but start conservative. Begin with a narrow auto-approval scope (maybe just meals under $100 with receipts) and expand gradually as you validate the system works and users adapt. Don’t try to automate everything on day one.

Ensure you have internal capability to modify rules quickly - if you’re dependent on external resources for every policy change, the maintenance burden becomes excessive. Build comprehensive logging and audit review processes from the start, not as an afterthought.

The speed improvements are worth it, but only if you invest properly in exception handling, user training, and ongoing maintenance. Half-hearted automation creates more problems than it solves. Our employees love the faster reimbursements, and managers appreciate focusing their time on expenses that truly need judgment rather than rubber-stamping routine submissions. Just don’t underestimate the change management effort required to get there successfully.