Solar AI-Q - OpenSolar Bi-Directional Integration
By Pipereply | March 2026
This integration provides a two-way sync between Solar AI-Q and OpenSolar. It ensures that projects, proposals, and signed contracts flow cleanly between systems while maintaining a single source of truth for customer data in Pipereply for consistant communication and reporting.

🔒 Security
  • All inbound OpenSolar webhooks are validated using the Webhook Secret generated during provisioning.
  • Only payloads with valid signatures are processed.
  • Outbound project creation requests from Pipereply are authenticated via a per-client API Key.
  • All OpenSolar API credentials are encrypted at rest in the registry database using Fernet symmetric encryption.
  • Client databases are fully isolated - each client has a separate PostgreSQL instance with zero cross-client data access.
  • All webhook events and API calls are logged to an audit trail for traceability and debugging.

Minimum Data Requirements
Before pushing a contact to OpenSolar for project creation, you MUST have the following in Pipereply.
Contact Name
Email
Street Address
Suburb
State
Postcode
Additional fields are required if your account is configured for strict validation: number of phases, roof type, and (for commercial projects) business name and ABN.

Pipereply → OpenSolar (Project Creation)
Trigger
  • Typically initiated when a salesperson completes the Meeting Status Update form or moves the opportunity to Quote Requested in Pipsline 2 (Appt to Quote) or the Create Project stage in Pipeline 3 (Quote to Sale).
  • A workflow fires a webhook to the Solar AI-Q Hub, which authenticates the request and begins processing.
Logic
  1. Validates required fields based on your configured validation mode (strict or minimal).
  1. If validation fails, the opportunity is moved to Data Missing and a note is added to the contact listing the missing fields.
  1. Geocodes the site address via Google Maps to obtain latitude/longitude coordinates.
  1. Maps roof type, electrical phases, and other site data to OpenSolar's format.
  1. Looks up the assigned sales rep's email in OpenSolar to assign the project to the correct team member.
  1. Creates the project in OpenSolar with all site and customer data pre-populated.
  1. Links the contact in OpenSolar to the new project (or links to an existing OpenSolar contact if the email already exists).
Fields Pushed into OpenSolar from Pipereply
  • Contact details: first name, last name, email, phone.
  • Site information: street address, suburb, state, postcode, country, geocoded lat/lon.
  • Property details: roof type, number of storeys, number of electrical phases, cellular coverage.
  • Utility information: NMI, retailer, distributor, meter identifier.
  • Site notes: any notes from the CRM opportunity.
  • Linking fields: Pipereply opportunity ID and contact ID are stored on the OpenSolar project for two-way matching.
What Happens in Pipereply After Project Creation
  • Opportunity moves to Project Created stage.
  • Custom fields updated: project_id, project_link, project_source ("OpenSolar"), latitude, longitude.
  • Contact fields updated: opensolar_contact_id, proposal_link.
  • Tag added: 3. project created.
  • Contact note added with confirmation and processing time.

OpenSolar → Pipereply (Project Updates)
Triggers
Proposal Sent: When a proposal is shared from OpenSolar to the customer.
Proposal Viewed: When the customer opens the proposal link.
Proposal Signed: When a customer signs and accepts a proposal in OpenSolar.
Logic
Finds the matching Pipereply opportunity using a waterfall approach:
  1. Path 1: Looks up by Pipereply opportunity ID stored on the OpenSolar project (custom_project_info_1). Fastest match - works when the project was created from Pipereply.
  1. Path 2: Looks up the contact in Pipereply by contact ID, then searches for opportunities in Pipelines 1, 2, and 3.
  1. Path 3: Searches Pipereply for a matching contact by email, then searches for opportunities in Pipelines 1, 2, and 3.
  1. Path 4 (optional): If no match is found and Auto-Create is enabled, creates the contact and opportunity in Pipereply automatically. Only applies to Proposal Sent and Proposal Signed events.
Updates at Proposal Sent
Contact custom fields:
  • proposal_link → Direct link to the proposal.
Opportunity custom fields:
  • project_status → "Proposal Sent".
  • date_quoted.
  • project_link → Direct link to the OpenSolar project.
  • proposal_link → Customer-facing proposal URL.
  • project_id → OpenSolar project ID.
  • project_source → "OpenSolar".
  • Technical + pricing details (up to 3 system options):
  • Panel make/model and quantity, inverter make/model and quantity, battery make/model and size.
  • System size (kW), project type (Solar Only, Battery Only, Solar and Battery).
  • STC credits, rebate amounts, incentive discounts, system price (inc/ex GST).
  • Per-option summaries (option_1, option_2, option_3) with equipment strings and pricing breakdowns.
  • project_options_ai_summary → text summary of all design options.
Pipeline/stage change:
  • Pipeline = Quote to Sale.
  • Stage = Project Sent.
Other actions:
  • Sales rep assigned by matching OpenSolar user email to Pipereply user.
  • Tag added: 3. project sent.
  • Previous "viewed" tags removed if present.
Updates at Proposal Viewed
Opportunity custom fields:
  • project_status → "Proposal Viewed".
Pipeline/stage change:
  • Stage = Project Viewed.
Other actions:
  • Tag added: 3. project viewed.
Note: The viewed update is intentionally minimal. If the opportunity has already progressed past "Viewed" (e.g. it's already at "Sold"), the update is skipped to prevent moving the opportunity backwards.
Updates at Proposal Signed
Opportunity custom fields:
  • project_status → "Project Sold".
  • date_signed.
  • project_link.
  • Sold system details: panel, inverter, battery (specific system the customer chose).
  • Final pricing (inc/ex GST), STC discounts.
  • State Based rebate eligibility auto-detected (Rebate, Rebate + Loan, or N/A).
Pipeline/stage change:
  • Pipeline = Quote to Sale.
  • Stage = Project Sold.
  • Status = Won.

Mud Maps - Process Overview
Pipereply → OpenSolar
  1. Sales rep moves the Opportunity to Quote Requested or Create Project stages in Pipereply.
  1. A workflow sends Contact + Site data to the Solar AI-Q Hub.
  1. Hub validates data, geocodes address, and maps fields to OpenSolar format.
  1. Hub creates the Project in OpenSolar (ready for design & proposal).
  1. Hub links or creates the Contact in OpenSolar.
  1. Pipereply opportunity updated with project ID, link, and confirmation.
OpenSolar → Pipereply
  1. OpenSolar triggers webhook (proposal sent, viewed, or signed).
  1. Hub validates webhook signature.
  1. Hub finds matching contact by opportunity ID, contact ID, or email.
  1. Hub finds matching opportunity in Pipeline 1, 2, or 3.
  1. Updates contact/opportunity fields:
  • At Proposal Sent → push designs, pricing, system options, links.
  • At Proposal Viewed → update status to viewed.
  • At Proposal Signed → update status to sold, mark as won.

Key Rules
Pipereply is the system of record.
Projects are always created from Pipereply first. This ensures the link between Pipereply and OpenSolar is established from the start.
If the contact does not exist in Pipereply (and Auto-Create is disabled) and a proposal is sent from OpenSolar, the sync does not run.
Opportunities must include the OpenSolar Project ID for updates to match correctly. This is added automatically the first time a proposal is sent.
All data moves through a secure, signature-validated webhook.
Existing Contacts in OpenSolar
If the customer already exists in OpenSolar when a project is created from Pipereply, the new project is linked to their existing OpenSolar contact record. No duplicate contacts are created.
Multiple Proposal Options
The integration supports up to three system options per proposal. Each option's equipment, sizing, and pricing is captured individually in Pipereply.
Re-Sending Proposals
If you re-send a proposal, the existing Pipereply opportunity is updated with the latest data. No duplicates are created.

Configuration Options
These settings are configured during onboarding and can be adjusted by your Pipereply support team at any time.
Validation Mode
Auto-Create Contacts & Opportunities
This only applies to Proposal Sent and Proposal Signed events. Proposal Viewed without a match is always ignored.
Sales Rep Assignment
The integration matches your OpenSolar team members to Pipereply users by email. If no match is found, it falls back to a default assignee configured during onboarding.
Existing System Filtering
If your proposals include a customer's existing solar equipment alongside new options, the integration can be configured to skip existing systems when populating CRM data - ensuring only new equipment is shown.

Error Handling & Notifications
  • If a project creation fails (API error, timeout, etc.), a Slack alert is sent to the Pipereply support channel and a note is added to the Pipereply contact in your CRM.
  • If data validation fails (missing fields), the opportunity is moved to Data Missing with a note explaining what's needed. No Slack alert - this is a normal business event.
  • All webhook events and API calls are logged for audit and troubleshooting.
  • Your Pipereply support team has access to a log viewer for investigating any issues.

Support
For configuration changes, troubleshooting, or questions about the integration:
This document describes the OpenSolar integration as of March 2026. Features and configuration options may be updated as the platform evolves.