How SuiteProjects Pro Scripting Closes the Loop Between Salesforce, Concur, and NetSuite
For professional services organizations, the gap between winning a deal and recognizing revenue is filled with manual steps, disconnected systems, and data that never quite lines up. Salesforce knows about the opportunity. NetSuite owns the financials. Concur handles employee expenses. And SuiteProjects Pro (SPP) sits in the middle trying to manage it all.
The problem is that these systems were not designed to talk to each other seamlessly. Without automation, the handoffs between them require manual intervention at every stage creating projects by hand, re-entering expense data, and reconciling revenue transactions one by one. The result is delayed projects, billing errors, and finance teams buried in month-end chaos.
At Top Step, we recently helped a client build a fully automated, end-to-end workflow that connects all four systems using SPP scripting and API integrations. The result is a seamless flow from deal to delivery to revenue with virtually no manual re-entry required.
The Challenge: Four Systems, Zero Automation
Before the engagement, this client’s workflow looked something like this: a deal closed in Salesforce, then a project manager manually created a corresponding project in SPP. When employees submitted expenses in Concur, someone had to ensure those expenses were coded to the right project and eventually pulled into SPP for client billing. At month-end, the finance team faced hundreds of individual revenue recognition journal entries flowing from SPP into NetSuite one per time entry making reconciliation a multi-day ordeal.
Each handoff was a potential point of failure: wrong project codes, missed expense lines, duplicate entries, and budget data that was always slightly out of sync. The solution required connecting all four systems with intelligent automation that could handle the complexity of real-world business rules.
Step 1: Salesforce to SuiteProjects Pro — Automating Project Creation at the Right Moment
The workflow begins in Salesforce. Rather than waiting for someone to manually create a project in SPP after a deal is won, the integration kicks in earlier in the sales process. When an opportunity reaches the “Verbal Commit” stage in Salesforce, it is automatically pushed to SPP as a project giving the delivery team a head start on resourcing and planning.
The integration also handles the complexity that comes with enterprise-level deals. When an opportunity involves multiple business units managed in Salesforce using “Opportunity Splits” the script automatically creates a parent project with individual child projects for each business unit. Each child project is assigned the correct budget amount based on the revenue allocated to that unit in the Opportunity Split record. The parent/child hierarchy is set automatically, eliminating a configuration step that previously had to be done by hand.
Other business rules are built directly into the integration:
- Opportunities flagged as “Multi-Project PO” are created as parent projects to accommodate multiple child engagements under a single purchase order.
- Amendment opportunities are linked to existing parent projects, adding a new transactional budget rather than creating a duplicate project.
- Projects are moved to a “Quoting” stage in SPP as early as when a sales rep checks a “Create Quote?” checkbox in Salesforce, enabling earlier collaboration between sales and delivery.
- When an opportunity reaches Closed/Won, a full project update is triggered in SPP, ensuring all final details; amounts, PO numbers, and subsidiary hierarchy are accurately reflected.
The integration runs every ten minutes, meaning the gap between a deal moving forward in Salesforce and a project being ready in SPP is measured in minutes, not days.
Step 2: Keeping Parent and Child Projects Aligned
With parent/child project structures in play, a secondary script ensures that critical identifiers stay synchronized across the hierarchy. Specifically, when a project is nested under a parent, the script automatically copies the parent’s Salesforce Opportunity ID and NetSuite Project ID down to the child project.
This may sound simple, but it has significant downstream impact. Without these IDs correctly populated on child projects, revenue reporting in NetSuite becomes fragmented and difficult to reconcile at the parent engagement level. The script runs on a scheduled basis and handles bulk updates gracefully, ensuring that even large-scale project creation events result in a clean, fully populated data set.
Step 3: SPP to Concur: Putting Project Assignments Where Employees Need Them
Once a project exists in SPP and team members are assigned, those assignments need to be visible in Concur so employees can code their expense reports to the correct project. Without this connection, employees are forced to either guess at project codes or rely on a manual lookup process that inevitably produces errors.
The SPP-to-Concur integration solves this by monitoring project assignments in SPP. When a user is assigned to a project, the integration automatically adds two records in NetSuite: the resource is added to the project, and a user-to-project relationship is created. NetSuite then triggers its own script to push those relationships to Concur, making the project available as a cost code option for that specific employee.
The integration also handles cleanup intelligently. Projects that are inactive or that have expenses disabled are automatically excluded from Concur, preventing employees from accidentally coding expenses to closed or non-billable projects. The integration runs twice per day, keeping Concur in sync with the current state of project assignments in SPP.
This approach leveraged the client’s existing NetSuite-to-Concur connection rather than building a new direct integration, reducing complexity and taking advantage of infrastructure already in place.
Step 4: NetSuite to SPP: Pulling Approved Expenses Back In
The expense data journey completes with a nightly integration that reads approved expense reports and vendor bills from NetSuite and creates corresponding expense records in SPP. This ensures that project managers have an accurate, real-time view of actual project costs, not just hours, and that billable expenses are available for invoicing without anyone having to re-enter data.
The integration identifies only expense lines that are tagged to an SPP project, so irrelevant transactions do not create noise in the system. It also handles edge cases that arise in real-world expense management, including negative expense lines (corrections and refunds), lines added to expense reports that had already been partially exported, and proper mapping of expense dates and billable flags from NetSuite to the corresponding SPP fields.
The result is that project managers and finance teams can see the full cost picture of a project in SPP without anyone manually moving data between systems.
The Payoff: Clean Revenue Recognition in NetSuite
With accurate project data, correct expense coding, and synchronized resources, the final step is ensuring that monthly revenue recognition flows cleanly into NetSuite. The native SPP-to-NetSuite integration creates one journal entry (JE) per time entry, which at scale means potentially hundreds of JEs per month, per project. A custom script consolidates those transactions into a single journal entry per project, per month.
The JE number is written back to each revenue transaction in SPP, preserving the audit trail and making reconciliation straightforward. What previously took the finance team days now takes minutes. (We explored this script in detail in a previous article.
The Big Picture: SuiteProjects Pro as the Hub of Your PSA Ecosystem
What makes this implementation compelling is not any single script or integration in isolation. It is the fact that every piece was designed to work together, with SPP serving as the operational hub that connects the sales pipeline, employee expense management, and financial reporting into one coherent workflow.
When a new deal moves forward in Salesforce, a project is created in SPP within minutes. The right employees are assigned, and their project codes appear in Concur before they even need to file an expense report. Approved expenses flow back into SPP nightly. And at month-end, revenue recognition closes cleanly with a fraction of the manual effort.
Each integration in this ecosystem was built using SPP’s scripting and API capabilities. The scripts run on scheduled intervals, respond intelligently to business rules, and handle the real-world complexity that out-of-the-box integrations simply cannot anticipate.
If your organization is managing projects across Salesforce, Concur, NetSuite, and SuiteProjects Pro and your teams are still bridging the gaps manually this kind of connected automation is well within reach.
Ready to Close the Loop?
Top Step specializes in NetSuite Financials, Suite Projects Pro and SuiteProjects Pro scripting and integrations for professional services organizations. Whether you need to connect a single system or build a full ecosystem like the one discussed in this article, our team has the deep PS and platform expertise to design and deliver the right solution.
Contact us today to discuss how we can help you connect your PS systems into automated efficient business processes.
