The Coupa integration is read-only. June imports your requisitions and their attached documents to build a contract inventory—it does not create or modify records in Coupa.
What you’ll accomplish
- Create an OAuth2 (OIDC) client in Coupa with read scopes
- Connect the June integration
- Choose which requisition statuses and spend categories to sync
- Optionally map the Coupa fields June reads contract dates from
Prerequisites
Before starting the integration, ensure you have:- Coupa admin access to create an OAuth2 / OIDC client
- Your Coupa instance URL (e.g.,
https://customer.coupahost.com) - June organization admin permissions
How June Works with Coupa
When connected, June syncs your Coupa requisitions and turns each one into a software contract in June. For every requisition, June imports:- Contract value and currency (from the requisition total)
- Status, mapped to active, expired, or future
- Vendor and agreement name, derived from the requisition lines and matched to a software product
- Owner (the requester)
- Start and end dates, from configured custom fields and/or extracted from attached documents
- Attached documents from comments, lines, and the requisition itself
Unlike Zip, Coupa requisitions often don’t carry full contract terms as structured fields. June runs a document extraction pipeline on attached contracts to fill in details like dates, value, license counts, and renewal terms.
What the filters control
Contract date fields
Coupa stores contract dates in custom fields that vary by organization. You can tell June which fields to read:- Start Date Field / End Date Field: the names of the Coupa custom fields that hold the contract start and end dates (for example,
start-dateoramort-start-date). - Leave these blank to let June’s document extraction determine the dates from the attached contract instead.
Setup Process
Step 1: Create an OAuth2 Client in Coupa
1
Access Coupa OIDC settings
- Log in to Coupa as an administrator
- Navigate to Setup → Integrations → OAuth2 / OIDC Clients
- Create a new client for June
2
Grant read scopes
Grant the following read-only scopes so June can sync requisitions and related data:
core.requisition.readcore.comment.readcore.supplier.readcore.common.readcore.user.read
3
Copy the credentials
- Immediately copy the Client ID and Client Secret
- Note your Instance URL (e.g.,
https://customer.coupahost.com) - Store these securely for the next step
Step 2: Connect in June
1
Access June Integrations
- Log into June
- Navigate to Settings → Integrations
- Select Coupa from the available integrations
2
Enter credentials
Provide the following:
- Coupa Instance URL: e.g.,
https://customer.coupahost.com - OAuth2 Client ID: from your OIDC client
- OAuth2 Client Secret: from your OIDC client
3
Connect
- Click Connect
- June requests an access token and verifies API access
- The connection status shows Active
A successful connection confirms June can both authenticate and read requisitions from your instance.
Step 3: Configure Sync Options
1
Choose statuses and categories
- Set Requisition Statuses to the statuses you want imported (default: Ordered)
- Select the Spend Categories (commodities) to sync—these load from your Coupa instance
2
Map date fields (optional)
If your organization stores contract dates in Coupa custom fields, enter the Start Date Field and End Date Field names. Otherwise, leave them blank and June will extract dates from attached documents.
3
Run a sync
Coupa does not sync automatically on connect—start a Sync from the integration settings once your options are set.
After the sync completes, open your contracts in June to confirm requisitions were imported.
How the Sync Works
- Manual sync: Coupa syncs run when you trigger them (it does not auto-sync on connect), so you can configure filters first.
- Requisitions become contracts: Each requisition maps to one software contract, linked by its requisition ID so re-syncs update the same record. Multi-line requisitions are combined into a single contract; per-line detail is retained for reference.
- Document extraction: June pulls attached documents, classifies which ones are contracts, downloads them securely, and extracts contract terms (value, dates, license counts, renewal terms). Contracts move through processing states until extraction completes or is flagged for review.
- Vendor matching: June matches each contract to a known software product using requisition and supplier names, refined by names extracted from documents. Unmatched contracts are imported and flagged so you can assign the right product.
Example Use Cases
Turn requisitions into a contract inventory
Turn requisitions into a contract inventory
Sync your ordered software requisitions so each becomes a tracked contract with value, dates, and vendor in June.
Extract terms from contract PDFs
Extract terms from contract PDFs
Let June read attached contract documents to capture start/end dates and renewal terms that aren’t stored as structured fields in Coupa.
Focus on the right spend
Focus on the right spend
Use status and spend-category filters to sync only the requisitions that represent real software contracts.
Troubleshooting
Authentication succeeded but API access failed
Authentication succeeded but API access failed
Symptoms: June connects to OAuth but can’t read requisitionsSolutions:
- Confirm all read scopes are granted:
core.requisition.read,core.comment.read,core.supplier.read,core.common.read,core.user.read - Verify the OIDC client is active in Coupa
- Double-check the instance URL is correct and reachable
Authentication failed
Authentication failed
Symptoms: “Authentication failed” on connectSolutions:
- Verify the Client ID and Client Secret were copied correctly
- Generate a new client secret in Coupa if it may have been rotated or lost
- Confirm the instance URL uses the correct
https://...coupahost.comform
Few or no contracts imported
Few or no contracts imported
Symptoms: Sync completes but little data appearsSolutions:
- Broaden Requisition Statuses (e.g., include Approved and Pending Approval)
- Confirm the selected Spend Categories match where your software requisitions live
- Remember Coupa requires a manual sync—trigger one after changing filters
Contracts missing start/end dates
Contracts missing start/end dates
Symptoms: Imported contracts have blank datesSolutions:
- Set the Start Date Field and End Date Field to the Coupa custom fields where your dates live
- If dates live only in the contract PDF, leave those fields blank and let document extraction fill them in
- Check that contract documents are actually attached to the requisition
Security Best Practices
- Read-only scopes: Grant only the read scopes June needs—it never writes to Coupa
- Secure storage: Client credentials and access tokens are encrypted at rest in June’s secure storage
- Token rotation: June refreshes its access token automatically; rotate the client secret in Coupa periodically
- Scope by filter: Use status and category filters to limit which requisitions June imports
Next Steps
Zip Integration
Also using Zip? Connect it to sync agreements as contracts
Firstbase Integration
Track equipment orders and returns alongside your contracts
AI Insights
Use AI to analyze contract spend, renewals, and extracted terms
Identity Providers
Sync employees so requisition owners map to the right people
Support Resources
Need help with your Coupa integration?- Coupa Documentation: Review the Coupa Core API documentation for OAuth and scope details
- June Support: Contact support for integration-specific assistance
After connecting, configure your filters and trigger a sync. Document extraction runs in the background, so contract terms may continue to populate for a short time after the initial sync.