Woopra
Datafly Signal delivers events and visitor traits to Woopra server-to-server using the HTTP Tracking API. Events are sent from your own infrastructure, so they are not affected by ad blockers or browser tracking prevention, and your raw event data never leaves your environment except as the call to Woopra.
Why route Woopra through Datafly Signal
- Your numbers stop depending on what the browser allows. Client-side analytics loses every visit where the tag is blocked or the page unloads early. Signal delivers from the server, so Woopra receives the complete event stream.
- Client IP and user agent are preserved. Server-to-server delivery normally loses both, which weakens matching. Signal forwards the genuine visitor values as request headers so Woopra attributes the event to the right session.
- One consent decision governs every destination. Woopra is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
Prerequisites
Before configuring Woopra in Signal you need an active Woopra account with a configured project.
Step 1: Find your Project Domain
- Sign in to Woopra and select your project.
- Go to Settings > Configure Tracking.
- Note your Project Domain (for example
mywebsite.com). This is exactly the value Signal sends as theprojectparameter.
Woopra’s HTTP Tracking API authenticates by project domain alone. There is no API key or secret to generate — the project domain is the only credential.
Step 2: Capture the Woopra visitor cookie (recommended)
Woopra stitches browser and server events together using its visitor cookie (wooTracker, available in the browser as window.woopra.cookie). If you also run Woopra’s browser tracker, add a collected ID named woopra_cookie that reads the wooTracker cookie; Signal sends it as cookie so server events land on the same profile. Without it, Signal sends its own anonymous ID as the cookie, and signed-in events are joined by cv_id.
Configure in Signal
Configuration Fields
| Field | Required | Description |
|---|---|---|
project | Yes | Your Woopra project domain (e.g. mywebsite.com), exactly as shown under Settings > Configure Tracking. |
timeout | No | Session idle timeout in milliseconds. Defaults to 1800000 (30 minutes) to match Woopra’s browser tracker. |
Management UI Setup
Add the integration
Go to Integrations > Add Integration > Woopra.
Enter your project domain
Enter your project domain and, optionally, a custom timeout.
Select consent categories
Select the consent categories that should gate analytics delivery (typically analytics).
Save
Click Save. Signal begins delivering events to Woopra on the next matching event.
API Endpoint
GET https://www.woopra.com/track/ce/?project={project}&event={event_name}&cookie={visitor_cookie}&...datafly.identify() calls the identify variant, which links the cookie to cv_id without recording an event:
GET https://www.woopra.com/track/identify/?project={project}&cookie={visitor_cookie}&cv_id={user_id}&...Woopra responds with a 2xx immediately: 200 (processed) or 202 (queued under load). A 4xx indicates a malformed request or an unknown project.
Identity Signals
Every call carries these, mapped in the blueprint’s defaults (Woopra’s query-string requests carry only what the blueprint maps):
| Signal | Parameter | Description |
|---|---|---|
| Visitor cookie | cookie | The collected woopra_cookie, else Signal’s anonymous ID. Sent unprefixed; the lowest-order Woopra identifier. |
| User ID | cv_id | The signed-in user ID: Woopra’s highest-order identifier. |
| Company | cv_company | The company identify trait, when set. |
| IP address | ip | Visitor IP, so Woopra resolves geo from the visitor, not Signal. |
| User-Agent | User-Agent header | Visitor user agent, for device and browser. |
| Referrer | referer | Page referrer. |
| Time | timestamp | Event time in epoch milliseconds. |
| Visit timeout | timeout | From the connection, default 1800000 (30 minutes). |
| Campaign | ce_campaign_source, ce_campaign_medium, ce_campaign_name, ce_campaign_term, ce_campaign_content | From the UTM parameters. |
No personal data is sent: Woopra identifies profiles by cookie and cv_id, so cv_email and cv_name are not mapped. Add them on your installed integration only where you have a lawful basis.
Woopra namespaces its parameters by type: custom event properties are prefixed ce_, custom visitor properties cv_, and the cookie is sent unprefixed. The blueprint targets the prefixed names directly.
Event Mapping
Events keep Signal’s canonical lowercase names (see the event specs), with each documented property as a ce_ property and currency upper-cased. Page views are Woopra’s pv event with ce_url (path), ce_uri (full URL) and ce_title.
| Preset | Events |
|---|---|
| Default | page (pv), identify, sign_up, login, search, view_item, add_to_cart, begin_checkout, purchase, refund, generate_lead, subscription_started, subscription_cancelled |
| Retail | pv, identify and the full ecommerce spec |
| B2B / SaaS | pv, identify and the full SaaS spec |
| Insurance | pv, identify and the full insurance spec |
Example: purchase
datafly.track("purchase", {
transaction_id: "ORD-001",
value: 149.95,
currency: "usd",
coupon: "WELCOME10"
});GET https://www.woopra.com/track/ce/
?project=mywebsite.com
&response=json
&ce_app=datafly-signal
&event=purchase
&cookie=AH47DHS5SF182DIQZJD
&cv_id=user-123
&ip=203.0.113.50
×tamp=1717628400000
&timeout=1800000
&ce_transaction_id=ORD-001
&ce_value=149.95
&ce_currency=USD
&ce_coupon=WELCOME10(The visitor User-Agent travels on the User-Agent HTTP header.)
Testing
Trigger an event
Trigger a tracked action (e.g. a purchase) on your site, or replay one through Signal’s event debugger.
Check the response
Signal logs Woopra’s response. A 200 (processed) or 202 (queued) means the request was accepted.
Verify in Woopra
In Woopra, open People / Profiles and find the visitor (by user ID or cookie). The new event appears on their timeline.
Troubleshooting
| Problem | Solution |
|---|---|
| Events not appearing | Confirm the project domain matches exactly what Woopra shows under Settings > Configure Tracking. A mismatched domain silently drops events. |
| Events land on a different profile from browser events | Add the woopra_cookie collected ID so server events carry the browser’s wooTracker cookie; signed-in events join on cv_id. |
| Geo shows your server location | Confirm the ip parameter is the visitor IP, not the Signal egress IP. Signal forwards the original request IP automatically. |
| Custom properties missing | Event properties must be ce_-prefixed and visitor properties cv_-prefixed. The blueprint applies these; if you added custom mappings, prefix the targets correctly. |
202 responses | This is normal under load — the request was queued and will be processed. No retry needed. |