diff --git a/Civi/DataProcessor/Factory.php b/Civi/DataProcessor/Factory.php
index 71770050aac8754ea1fba31eb237d6c5d5710e53..886bf45a4ec447e272ef7efb98e97ff89b82f1d5 100644
--- a/Civi/DataProcessor/Factory.php
+++ b/Civi/DataProcessor/Factory.php
@@ -107,6 +107,7 @@ class Factory {
     $this->addDataSource('address', 'Civi\DataProcessor\Source\Contact\AddressSource', E::ts('Address'));
     $this->addDataSource('phone', 'Civi\DataProcessor\Source\Contact\PhoneSource', E::ts('Phone'));
     $this->addDataSource('website', 'Civi\DataProcessor\Source\Contact\WebsiteSource', E::ts('Website'));
+    $this->addDataSource('campaign', 'Civi\DataProcessor\Source\Campaign\CampaignSource', E::ts('Campaign'));
     $this->addDataSource('contribution', 'Civi\DataProcessor\Source\Contribution\ContributionSource', E::ts('Contribution'));
     $this->addDataSource('case', 'Civi\DataProcessor\Source\Cases\CaseSource', E::ts('Case'));
     $this->addDataSource('relationship', 'Civi\DataProcessor\Source\Contact\RelationshipSource', E::ts('Relationship'));
diff --git a/Civi/DataProcessor/Source/Campaign/CampaignSource.php b/Civi/DataProcessor/Source/Campaign/CampaignSource.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5efa2bfcd86be85e8963c1137afda798e81b0a0
--- /dev/null
+++ b/Civi/DataProcessor/Source/Campaign/CampaignSource.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * @author Jaap Jansma <jaap.jansma@civicoop.org>
+ * @license AGPL-3.0
+ */
+
+namespace Civi\DataProcessor\Source\Campaign;
+
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
+
+use CRM_Dataprocessor_ExtensionUtil as E;
+
+class CampaignSource extends AbstractCivicrmEntitySource {
+
+  /**
+   * Returns the entity name
+   *
+   * @return String
+   */
+  protected function getEntity() {
+    return 'Campaign';
+  }
+
+  /**
+   * Returns the table name of this entity
+   *
+   * @return String
+   */
+  protected function getTable() {
+    return 'civicrm_campaign';
+  }
+}
\ No newline at end of file