> ## Documentation Index
> Fetch the complete documentation index at: https://wegive.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Neon Campaign Mapping

> Detailed mapping between Neon CRM campaign objects and WeGive campaign records

# Campaign Object Mapping

This document details the comprehensive mapping between Neon CRM campaign objects and WeGive campaign records, including statistics, tracking, and synchronization behavior.

## Object Overview

### Neon Campaign Object

Represents fundraising campaigns in Neon CRM including goals, statistics, and web integration features.

### WeGive Campaign Object

Represents fundraising campaigns in WeGive including goals, tracking, and donation collection features.

## Core Campaign Mapping

### WeGive Campaign to Neon Campaign

#### Basic Information

| WeGive Field  | Neon Field           | Data Type   | Direction     | Required | Transformation          |
| ------------- | -------------------- | ----------- | ------------- | -------- | ----------------------- |
| `id`          | Correlation ID       | UUID/String | -             | No       | Stored for tracking     |
| `name`        | `name`               | String      | Bidirectional | Yes      | Direct mapping          |
| `description` | Campaign description | Text        | Export        | No       | Limited support         |
| `status`      | `status`             | String      | Bidirectional | No       | Active/Inactive mapping |

#### Timeline Information

| WeGive Field | Neon Field    | Data Type | Direction     | Required | Transformation  |
| ------------ | ------------- | --------- | ------------- | -------- | --------------- |
| `start_date` | `startDate`   | Date      | Bidirectional | No       | Date formatting |
| `expiration` | `endDate`     | Date      | Bidirectional | No       | Date formatting |
| `created_at` | Creation date | DateTime  | Export        | No       | ISO 8601 format |
| `updated_at` | Last modified | DateTime  | Export        | No       | ISO 8601 format |

#### Financial Goals

| WeGive Field | Neon Field | Data Type | Direction     | Required | Transformation |
| ------------ | ---------- | --------- | ------------- | -------- | -------------- |
| `goal`       | `goal`     | Decimal   | Bidirectional | No       | Direct mapping |

#### Web Integration

| WeGive Field | Neon Field        | Data Type | Direction | Required | Transformation |
| ------------ | ----------------- | --------- | --------- | -------- | -------------- |
| `slug`       | `campaignPageUrl` | String    | Export    | No       | URL generation |
| `slug`       | `donationFormUrl` | String    | Export    | No       | URL generation |

#### Statistics (Import Only)

| WeGive Field                   | Neon Field                           | Data Type | Direction   | Required | Transformation      |
| ------------------------------ | ------------------------------------ | --------- | ----------- | -------- | ------------------- |
| `total_donated`                | `statistics.donationAmount`          | Decimal   | Import Only | No       | Direct mapping      |
| `number_of_donations`          | `statistics.donationCount`           | Integer   | Import Only | No       | Direct mapping      |
| `total_registration_collected` | `statistics.eventRegistrationAmount` | Decimal   | Import Only | No       | Event statistics    |
| `number_of_registrations`      | `statistics.eventRegistrationCount`  | Integer   | Import Only | No       | Event statistics    |
| `total_pledged`                | `statistics.pledgeAmount`            | Decimal   | Import Only | No       | Pledge statistics   |
| `number_of_pledges`            | `statistics.pledgeCount`             | Integer   | Import Only | No       | Pledge statistics   |
| `grand_total`                  | `statistics.grandTotal`              | Decimal   | Import Only | No       | Combined statistics |

#### Integration Fields

| WeGive Field | Neon Field | Data Type | Direction   | Required | Transformation     |
| ------------ | ---------- | --------- | ----------- | -------- | ------------------ |
| `neon_id`    | `id`       | Integer   | Correlation | No       | Campaign reference |

## URL Generation

### Campaign URLs

WeGive automatically generates campaign URLs for Neon CRM:

#### Campaign Page URL

```
https://app.wegive.com/{organization_slug}/campaigns/{campaign_slug}
```

#### Donation Form URL

```
https://app.wegive.com/{organization_slug}/campaigns/{campaign_slug}/give
```

### URL Components

* **Organization Slug**: WeGive organization identifier
* **Campaign Slug**: WeGive campaign slug/identifier
* **Protocol**: Always HTTPS for security

## Status Mapping

### Campaign Status Values

| WeGive Status                      | Neon Status | Description                   |
| ---------------------------------- | ----------- | ----------------------------- |
| Active (not deleted)               | "ACTIVE"    | Campaign is currently active  |
| Deleted (`deleted_at` is not null) | "INACTIVE"  | Campaign has been deactivated |

### Status Synchronization

* **WeGive → Neon**: Deleted campaigns marked as INACTIVE
* **Neon → WeGive**: INACTIVE campaigns skipped during import
* **Default**: New campaigns default to ACTIVE status

## Campaign Statistics

### Statistics Import from Neon CRM

Campaign statistics are imported from Neon CRM as read-only data:

#### Financial Statistics

* **Donation Amount**: Total amount donated to campaign
* **Donation Count**: Number of donations made to campaign
* **Pledge Amount**: Total amount pledged to campaign
* **Pledge Count**: Number of pledges made to campaign
* **Grand Total**: Combined total of all campaign activity

#### Event Statistics (when applicable)

* **Event Registration Amount**: Total registration fees collected
* **Event Registration Count**: Number of event registrations
* **Combined Metrics**: Events integrated with campaign tracking

### Statistics Structure in Neon

```json theme={null}
{
  "statistics": {
    "donationAmount": 25000.00,
    "donationCount": 150,
    "eventRegistrationAmount": 5000.00,
    "eventRegistrationCount": 25,
    "grandTotal": 30000.00,
    "pledgeAmount": 10000.00,
    "pledgeCount": 20
  }
}
```

## Complete Campaign Structure

### Full Neon Campaign Object

```json theme={null}
{
  "id": "789",
  "name": "Annual Fundraiser 2024",
  "status": "ACTIVE",
  "startDate": "2024-01-01",
  "endDate": "2024-12-31",
  "goal": 100000.00,
  "campaignPageUrl": "https://app.wegive.com/example-org/campaigns/annual-fundraiser-2024",
  "donationFormUrl": "https://app.wegive.com/example-org/campaigns/annual-fundraiser-2024/give",
  "statistics": {
    "donationAmount": 25000.00,
    "donationCount": 150,
    "eventRegistrationAmount": 5000.00,
    "eventRegistrationCount": 25,
    "grandTotal": 30000.00,
    "pledgeAmount": 10000.00,
    "pledgeCount": 20
  }
}
```

## Data Transformations

### Date Formatting

* **WeGive Format**: ISO 8601 datetime
* **Neon Format**: Date only (YYYY-MM-DD)
* **Conversion**: Date portion extracted from datetime
* **Timezone**: Converted to organization's timezone

### URL Generation Logic

```javascript theme={null}
// Campaign page URL generation
const campaignPageUrl = `https://app.wegive.com/${organization.slug}/campaigns/${campaign.slug}`;

// Donation form URL generation  
const donationFormUrl = `https://app.wegive.com/${organization.slug}/campaigns/${campaign.slug}/give`;
```

### Status Mapping Logic

```javascript theme={null}
// WeGive to Neon status mapping
const neonStatus = campaign.deleted_at ? 'INACTIVE' : 'ACTIVE';

// Neon to WeGive status mapping
if (neonCampaign.status === 'INACTIVE') {
  // Skip inactive campaigns during import
  continue;
}
```

## Custom Field Mapping

### Default Campaign Mappings

The integration includes pre-configured mappings:

| Integration Path                     | WeGive Path                    | Purpose             | Level         |
| ------------------------------------ | ------------------------------ | ------------------- | ------------- |
| `endDate`                            | `expiration`                   | Campaign end date   | Bidirectional |
| `goal`                               | `goal`                         | Fundraising goal    | Bidirectional |
| `name`                               | `name`                         | Campaign name       | Bidirectional |
| `startDate`                          | `start_date`                   | Campaign start date | Bidirectional |
| `statistics.donationAmount`          | `total_donated`                | Total donations     | Import only   |
| `statistics.donationCount`           | `number_of_donations`          | Donation count      | Import only   |
| `statistics.eventRegistrationAmount` | `total_registration_collected` | Event revenue       | Import only   |
| `statistics.eventRegistrationCount`  | `number_of_registrations`      | Registration count  | Import only   |
| `statistics.grandTotal`              | `total_donated`                | Grand total         | Import only   |

### Adding Custom Campaign Mappings

Organizations can add custom campaign field mappings:

```json theme={null}
{
  "integration": "CAMPAIGN",
  "integration_path": "customField.value",
  "wegive_path": "custom_field_name",
  "crm": "NEON",
  "level": "bidirectional"
}
```

## Synchronization Behavior

### Campaign Creation

1. **Name Validation**: Ensures campaign has valid name
2. **URL Generation**: Automatically generates campaign and donation URLs
3. **Status Setting**: Sets appropriate active status
4. **Goal Setting**: Maps financial goals if specified

### Campaign Updates

1. **Existing Check**: Uses `neon_id` to identify existing campaigns
2. **Field Updates**: Updates modifiable fields
3. **URL Updates**: Updates URLs if organization or campaign slug changes
4. **Status Changes**: Handles activation/deactivation

### Import from Neon CRM

1. **Active Filter**: Only imports ACTIVE campaigns
2. **Campaign Creation**: Creates new WeGive campaigns
3. **Statistics Import**: Imports read-only statistics data
4. **Correlation Tracking**: Stores Neon campaign ID

## Campaign-Donation Relationship

### Donation Association

When donations are associated with campaigns:

1. **Campaign Sync First**: Ensures campaign exists in Neon CRM before donation
2. **Campaign Reference**: Donations include campaign ID reference
3. **Statistics Update**: Campaign statistics automatically updated by Neon CRM
4. **URL Integration**: Donation URLs reference campaign structure

### Campaign Validation

Before creating donations with campaign association:

* Campaign must exist in both systems
* Campaign must be in ACTIVE status
* Campaign correlation IDs must be established

## Error Handling

### Validation Errors

* **Missing Name**: Campaign name is required
* **Invalid Dates**: Start date must be before end date
* **Invalid Goal**: Goal must be positive number
* **URL Generation**: Organization slug must be valid

### Resolution Strategies

* **Data Correction**: Tools for correcting invalid campaign data
* **Duplicate Prevention**: Name-based duplicate detection
* **Manual Review**: Administrative interface for campaign conflicts
* **Retry Logic**: Automatic retry for transient failures

## Performance Considerations

### Campaign Processing

* **Bulk Import**: Efficient processing of multiple campaigns
* **Statistics Handling**: Optimized statistics import and display
* **URL Generation**: Efficient URL generation and validation
* **Memory Usage**: Optimized memory usage for large campaign sets

### API Optimization

* **Rate Limiting**: Respectful API usage patterns
* **Caching**: Smart caching of campaign data
* **Parallel Processing**: Concurrent campaign processing where safe
* **Error Recovery**: Graceful handling of partial failures

## API Examples

### Creating Campaign

```http theme={null}
POST /v2/campaigns
{
  "name": "Spring Fundraiser 2024",
  "status": "ACTIVE",
  "startDate": "2024-03-01",
  "endDate": "2024-05-31",
  "goal": 50000.00,
  "campaignPageUrl": "https://app.wegive.com/example-org/campaigns/spring-fundraiser-2024",
  "donationFormUrl": "https://app.wegive.com/example-org/campaigns/spring-fundraiser-2024/give"
}
```

### Updating Campaign

```http theme={null}
PUT /v2/campaigns/789
{
  "goal": 75000.00,
  "endDate": "2024-06-30"
}
```

### Getting Campaign with Statistics

```http theme={null}
GET /v2/campaigns/789
```

Response:

```json theme={null}
{
  "id": "789",
  "name": "Spring Fundraiser 2024",
  "status": "ACTIVE",
  "goal": 75000.00,
  "statistics": {
    "donationAmount": 35000.00,
    "donationCount": 200,
    "grandTotal": 35000.00
  }
}
```

## Best Practices

### Campaign Management

* **Clear Naming**: Use descriptive, unique campaign names
* **Date Management**: Set realistic start and end dates
* **Goal Setting**: Set achievable but meaningful goals
* **Status Tracking**: Regularly review and update campaign status

### Integration Management

* **URL Consistency**: Maintain consistent URL structures
* **Statistics Monitoring**: Regularly review campaign statistics
* **Performance Tracking**: Monitor campaign sync performance
* **Error Handling**: Address campaign sync errors promptly

### Data Quality

* **Name Uniqueness**: Avoid duplicate campaign names
* **Date Validation**: Ensure logical date relationships
* **Goal Tracking**: Monitor goal progress and adjust as needed
* **Regular Cleanup**: Archive or deactivate completed campaigns

## Campaign Reporting

### Available Metrics

* **Financial Performance**: Track donations against goals
* **Participation Metrics**: Monitor donor engagement
* **Time-based Analysis**: Track performance over campaign duration
* **Comparative Analysis**: Compare campaigns across time periods

### Integration Benefits

* **Real-time Updates**: Campaign statistics updated automatically
* **Cross-platform Visibility**: Campaigns visible in both systems
* **Unified Reporting**: Combined reporting across platforms
* **Performance Optimization**: Data-driven campaign optimization

This comprehensive campaign mapping ensures effective fundraising campaign management and tracking between WeGive and Neon CRM while providing valuable insights for optimization.
