SuperOffice Integration

Sync your SuperOffice CRM contacts and companies with Propstreet automatically.

Overview

Feature Support
Market Norway (Nordic-wide)
Sync Direction Bidirectional
Real-time Updates Yes (customer-managed sync)
Contacts ✅ Full support
Companies ✅ Full support

Data Mapping

SuperOffice Terminology

SuperOffice uses different terminology than most CRMs:

SuperOffice Propstreet What It Represents
Person Contact An individual
Contact Company A company/firm

Person Fields (Individual)

SuperOffice Propstreet Notes
Firstname First Name
Lastname Last Name
Email Email Primary email synced
Mobile Phone Phone Preferred phone number
Title Job Title Synced to company connection
ContactId Connection Links person to company
Category Tags Mapped to Propstreet tags
PersonId External Ref Used for record matching

Note: SuperOffice may have multiple phone fields. We sync the mobile phone to Propstreet's phone field.

Contact Fields (Company)

SuperOffice Propstreet Notes
Name Name
OrgNr External Reference Used for matching (Norwegian org.nr)
Country Country Code ISO 2-letter code
URL Homepage URL Full website URL
Domain Set directly or auto-extracted from URL

How Sync Works

SuperOffice → Propstreet

You control the sync through your own integration layer:

  1. Configure SuperOffice Webhooks to send events to your middleware (e.g., Azure Logic Apps, n8n, or custom service)
  2. Your middleware transforms and pushes data to Propstreet via our API
  3. Records are matched using email or organization number and created/updated in Propstreet

This gives you full control over sync timing, filtering, and data transformation.

Propstreet → SuperOffice

When you update a contact in Propstreet, you have two options:

Option A: Webhooks (Recommended)

  1. Register a Propstreet webhook for contact.* and company.* events
  2. Propstreet pushes changes to your endpoint in real-time
  3. Your middleware transforms and pushes to SuperOffice

Option B: Polling

  1. Your integration layer polls the Propstreet API for changes (using updated_since)
  2. Changes are transformed and pushed to SuperOffice via their API
  3. Your SuperOffice records stay in sync

Webhooks provide near real-time sync without polling overhead.

Duplicate Handling

We use smart matching to prevent duplicates:

  • Persons: Matched by email address first, then SuperOffice Person ID via externalRefs
  • Companies: Matched by organization number (OrgNr), then domain, then company name

SuperOffice also provides built-in duplicate detection that your integration can leverage:

  • Domain-based duplicate checks for companies
  • Name-based duplicate detection
  • Configurable duplicate rules

If we detect a potential duplicate, we update the existing record rather than creating a new one.

Field Considerations

Foreign Keys for Reliable Sync

SuperOffice supports foreign keys as a first-class feature for integrations. Store Propstreet IDs in SuperOffice's foreign key fields, and store SuperOffice IDs in Propstreet's externalRefs:

{
  "externalRefs": [{ "namespace": "superoffice", "id": "12345" }]
}

This enables deterministic matching without relying on name or email matching.

Person↔Company Relationships

In SuperOffice, each Person has a primary company association via ContactId. In Propstreet:

  • Each contact can have multiple company connections
  • Exactly one connection must be marked as primary
  • Job title is stored on the connection, not the contact

When syncing, ensure you:

  • Create or find the company first
  • Link the person to the company with the appropriate job title

Notes vs Strategy

Propstreet has two different fields for text information:

  • Strategy - Investment focus (e.g., "Office properties in Oslo, 50-200 MNOK")
  • Notes - Activity log entries (call notes, meeting summaries, etc.)

How you map SuperOffice's note/activity fields depends on your organization's usage:

  • If notes contain investment criteria → map to strategy field
  • If notes contain call logs/activity → use the Notes API endpoint

Phone Numbers

SuperOffice has multiple phone fields per person (Mobile, Direct, etc.). We sync the mobile number to Propstreet; other phone numbers are not synced by default.

Organization Number (Norwegian)

SuperOffice has native support for organization numbers via the OrgNr field. This is ideal for Norwegian company matching and deduplication.

Setup Requirements

To build a SuperOffice integration, you'll need:

  1. SuperOffice Account with API access
  2. Development Tools License - Required for webhook support (real-time sync from SuperOffice)
  3. Propstreet API Credentials - Generate in your account settings
  4. Integration Layer - Middleware to handle webhooks and API calls (Azure Logic Apps, n8n, or custom)

Webhook License Note

SuperOffice webhooks require the "Development Tools" license, which is an additional cost per site. Without this license, you can still integrate using polling (checking for changes on a schedule).

SuperOffice API Best Practices

  • Use the /api/v1/{Entity}/default endpoint to get correctly initialized entities before creating
  • Store external IDs using SuperOffice's foreign keys feature
  • Use duplicate detection endpoints before creating new records

Getting Started

  1. Generate Propstreet API credentials in your account settings (requires login)
  2. Set up API access in SuperOffice and configure OAuth
  3. Review SuperOffice's REST API documentation
  4. Set up your integration layer to sync data between SuperOffice and Propstreet
  5. If using real-time sync, configure SuperOffice Webhooks (requires Development Tools license)

You're responsible for building and maintaining the integration.

Frequently Asked Questions

How do I authenticate with SuperOffice?

SuperOffice uses OAuth 2.0 for authentication. Register your application in the SuperOffice Developer Portal, configure redirect URIs, and implement the standard OAuth flow.

Do I need a special license for webhooks?

Yes. SuperOffice webhooks require the "Development Tools" license. Without this license, you can use polling instead (checking for changes every 5-15 minutes).

How do I receive real-time updates from SuperOffice?

With the Development Tools license, register webhooks for events like person.created, person.changed, contact.created, etc. SuperOffice sends a POST to your endpoint with event details.

How do I validate SuperOffice webhook signatures?

If you configure a secret when registering the webhook, SuperOffice sends an X-SuperOffice-Signature header containing an HMAC SHA256 signature (base64 encoded) of the request body.

What's the difference between Contact and Person in SuperOffice?

SuperOffice uses non-standard terminology:

  • Contact = Company/Firm (what most CRMs call "Account" or "Company")
  • Person = Individual (what most CRMs call "Contact")

How often does data sync?

Sync frequency depends on how you configure your integration layer:

  • Real-time: Use SuperOffice Webhooks (requires license) + Propstreet Webhooks for immediate syncs
  • Scheduled: Poll both APIs on a schedule (e.g., every 15 minutes, hourly)
  • Manual: Trigger syncs on-demand

How should I handle duplicates?

Use stable cross-system IDs stored in Propstreet's externalRefs and SuperOffice's foreign keys:

{
  "externalRefs": [{ "namespace": "superoffice", "id": "12345" }]
}

Search by externalRefs first, then fall back to email or organization number matching. SuperOffice also provides duplicate detection endpoints you can use before creating records.

How should I handle merge conflicts?

Design your integration layer to handle conflicts. Common approaches:

  • Last write wins: Use timestamps (UpdatedDate vs updatedUtc) to determine the most recent change
  • Source of truth: Designate one system as authoritative for specific fields
  • Manual review: Flag conflicts for human review

API References