diff --git a/Civi/DataProcessor/Factory.php b/Civi/DataProcessor/Factory.php
index 37ba0419a2fa136df7d44113050612939e044d44..60d6a49174bcbc20f576d0e741719f86447dd471 100644
--- a/Civi/DataProcessor/Factory.php
+++ b/Civi/DataProcessor/Factory.php
@@ -105,6 +105,7 @@ class Factory {
     $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('contribution_recur', 'Civi\DataProcessor\Source\Contribution\ContributionRecurSource', E::ts('Recurring Contribution'));
     $this->addDataSource('case', 'Civi\DataProcessor\Source\Cases\CaseSource', E::ts('Case'));
     $this->addDataSource('relationship', 'Civi\DataProcessor\Source\Contact\RelationshipSource', E::ts('Relationship'));
     $this->addDataSource('relationship_type', 'Civi\DataProcessor\Source\Contact\RelationshipTypeSource', E::ts('Relationship Type'));
diff --git a/Civi/DataProcessor/Source/Contribution/ContributionRecurSource.php b/Civi/DataProcessor/Source/Contribution/ContributionRecurSource.php
new file mode 100644
index 0000000000000000000000000000000000000000..637ac415e66cc00e9218dda1b072b517fca30555
--- /dev/null
+++ b/Civi/DataProcessor/Source/Contribution/ContributionRecurSource.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * @author Jaap Jansma <jaap.jansma@civicoop.org>
+ * @license AGPL-3.0
+ */
+
+namespace Civi\DataProcessor\Source\Contribution;
+
+use Civi\DataProcessor\Source\AbstractCivicrmEntitySource;
+
+use CRM_Dataprocessor_ExtensionUtil as E;
+
+class ContributionRecurSource extends AbstractCivicrmEntitySource {
+
+  /**
+   * Returns the entity name
+   *
+   * @return String
+   */
+  protected function getEntity() {
+    return 'ContributionRecur';
+  }
+
+  /**
+   * Returns the table name of this entity
+   *
+   * @return String
+   */
+  protected function getTable() {
+    return 'civicrm_contribution_recur';
+  }
+
+  /**
+   * Returns the default configuration for this data source
+   *
+   * @return array
+   */
+  public function getDefaultConfiguration() {
+    return [
+      'filter' => [
+        'is_test' => [
+          'op' => '=',
+          'value' => '0',
+        ]
+      ]
+    ];
+  }
+
+}