You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streams.apache.org by sb...@apache.org on 2020/02/25 15:24:28 UTC

[streams] branch master updated: Resolves STREAMS-654 (#496)

This is an automated email from the ASF dual-hosted git repository.

sblackmon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/streams.git


The following commit(s) were added to refs/heads/master by this push:
     new 611f68c  Resolves STREAMS-654 (#496)
611f68c is described below

commit 611f68c339eeb3f68f8c7792345e2ca69270035e
Author: Brian Hodge <br...@peoplepattern.com>
AuthorDate: Tue Feb 25 09:24:21 2020 -0600

    Resolves STREAMS-654 (#496)
    
    * STREAMS-654 Processor module for api.thedatagroup.com
    
    * STREAMS-654 Processor module for api.thedatagroup.com
    
    * STREAMS-654 Processor module for api.thedatagroup.com
    
    * STREAMS-654 Processor module for api.thedatagroup.com
    
    Co-authored-by: Steve Blackmon <sb...@apache.org>
---
 streams-contrib/pom.xml                            |   1 +
 .../streams-processor-thedatagroup/README.md       |   8 +
 .../streams-processor-thedatagroup/pom.xml         | 152 ++++++++++++
 .../apache/streams/thedatagroup/SyncAppend.java    |  44 ++++
 .../apache/streams/thedatagroup/SyncLookup.java    |  44 ++++
 .../apache/streams/thedatagroup/TheDataGroup.java  | 267 +++++++++++++++++++++
 .../streams/thedatagroup/api/AppendRequest.json    |  39 +++
 .../api/DemographicsAppendResponse.json            |  36 +++
 .../api/DemographicsAppendResponseAddress.json     |  41 ++++
 .../DemographicsAppendResponseDemographics.json    |  31 +++
 ...mographicsAppendResponseDemographicsFamily.json |  26 ++
 ...csAppendResponseDemographicsFamilyChildren.json |  31 +++
 ...mographicsAppendResponseDemographicsPerson.json |  54 +++++
 ...sAppendResponseDemographicsPersonEducation.json |  23 ++
 ...csAppendResponseDemographicsPersonFinances.json |  44 ++++
 ...csAppendResponseDemographicsPersonLanguage.json |  20 ++
 ...aphicsAppendResponseDemographicsPersonRace.json |  23 ++
 ...AppendResponseDemographicsPersonWorkerType.json |  20 ++
 ...raphicsAppendResponseDemographicsResidence.json |  76 ++++++
 ...ppendResponseDemographicsResidenceDwelling.json |  24 ++
 ...ographicsAppendResponseDemographicsVehicle.json |  23 ++
 .../api/DemographicsAppendResponseLifeStyles.json  |  32 +++
 ...emographicsAppendResponseLifeStylesApparel.json |  28 +++
 .../DemographicsAppendResponseLifeStylesBook.json  |  17 ++
 ...ographicsAppendResponseLifeStylesInterests.json | 116 +++++++++
 .../api/DemographicsAppendResponsePhones.json      |  14 ++
 .../thedatagroup/api/EmailAppendResponse.json      |  23 ++
 .../thedatagroup/api/EmailLookupRequest.json       |  14 ++
 .../streams/thedatagroup/api/IpLookupRequest.json  |  14 ++
 .../streams/thedatagroup/api/LookupResponse.json   |  20 ++
 .../thedatagroup/api/MobileAppendResponse.json     |  23 ++
 .../thedatagroup/api/PhoneAppendResponse.json      |  23 ++
 .../thedatagroup/api/PhoneAppendResponseItem.json  |  17 ++
 .../thedatagroup/api/PhoneLookupRequest.json       |  14 ++
 .../thedatagroup/api/VehicleAppendResponse.json    |  26 ++
 .../api/VehicleAppendResponseItem.json             |  20 ++
 .../config/TheDataGroupConfiguration.json          |  21 ++
 .../streams/thedatagroup/test/TheDataGroupIT.java  |  76 ++++++
 .../resources/TheDataGroupIT/TheDataGroupIT.conf   |  27 +++
 39 files changed, 1552 insertions(+)

diff --git a/streams-contrib/pom.xml b/streams-contrib/pom.xml
index 5478aa3..b974a54 100644
--- a/streams-contrib/pom.xml
+++ b/streams-contrib/pom.xml
@@ -56,6 +56,7 @@
         <module>streams-processor-peoplepattern</module>
         <module>streams-processor-pipl</module>
         <module>streams-processor-regex</module>
+        <module>streams-processor-thedatagroup</module>
         <module>streams-processor-urls</module>
         <module>streams-provider-facebook</module>
         <module>streams-provider-google</module>
diff --git a/streams-contrib/streams-processor-thedatagroup/README.md b/streams-contrib/streams-processor-thedatagroup/README.md
new file mode 100644
index 0000000..2f93226
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/README.md
@@ -0,0 +1,8 @@
+Apache Streams
+Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
+--------------------------------------------------------------------------------
+
+org.apache.streams:streams-processor-thedatagroup
+===========================================
+
+Integration library for api.thedatagroup.com
diff --git a/streams-contrib/streams-processor-thedatagroup/pom.xml b/streams-contrib/streams-processor-thedatagroup/pom.xml
new file mode 100644
index 0000000..943172e
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/pom.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.streams</groupId>
+        <artifactId>streams-contrib</artifactId>
+        <version>0.6.1-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>streams-processor-thedatagroup</artifactId>
+    <name>${project.artifactId}</name>
+
+    <description>TheDataGroup API Processors</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-config</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.typesafe</groupId>
+            <artifactId>config</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-pojo</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-http</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.juneau</groupId>
+            <artifactId>juneau-rest-client</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-testing</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+            <type>test-jar</type>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <testSourceDirectory>src/test/java</testSourceDirectory>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+        </resources>
+        <testResources>
+            <testResource>
+                <directory>src/test/resources</directory>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <groupId>org.jsonschema2pojo</groupId>
+                <artifactId>jsonschema2pojo-maven-plugin</artifactId>
+                <version>1.0.1</version>
+                <executions>
+                    <execution>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <annotationStyle>jackson2</annotationStyle>
+                    <customAnnotator>org.apache.streams.plugins.JuneauPojoAnnotator</customAnnotator>
+                    <generateBuilders>true</generateBuilders>
+                    <includeAdditionalProperties>false</includeAdditionalProperties>
+                    <includeHashcodeAndEquals>true</includeHashcodeAndEquals>
+                    <outputDirectory>${project.basedir}/target/generated-sources/pojo</outputDirectory>
+                    <propertyWordDelimiters></propertyWordDelimiters>
+                    <removeOldOutput>true</removeOldOutput>
+                    <serializable>true</serializable>
+                    <sourcePaths>
+                        <sourcePath>${project.basedir}/src/main/jsonschema</sourcePath>
+                    </sourcePaths>
+                    <useDoubleNumbers>true</useDoubleNumbers>
+                    <useLongIntegers>true</useLongIntegers>
+                </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.streams.plugins</groupId>
+                        <artifactId>streams-plugin-pojo</artifactId>
+                        <version>${project.version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>add-source</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>target/generated-sources/pojo</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/SyncAppend.java b/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/SyncAppend.java
new file mode 100644
index 0000000..7949914
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/SyncAppend.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.streams.thedatagroup;
+
+import org.apache.juneau.http.annotation.Body;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
+import org.apache.streams.thedatagroup.api.*;
+
+@RemoteInterface(path = "https://api.thedatagroup.com/v3/sync/append")
+public interface SyncAppend {
+
+  @RemoteMethod(method ="POST", path="/demographics")
+  public DemographicsAppendResponse appendDemographics(@Body AppendRequest request);
+
+  @RemoteMethod(method ="POST", path="/email")
+  public EmailAppendResponse appendEmail(@Body AppendRequest request);
+
+  @RemoteMethod(method ="POST", path="/mobile")
+  public MobileAppendResponse appendMobile(@Body AppendRequest request);
+
+  @RemoteMethod(method ="POST", path="/phone")
+  public PhoneAppendResponse appendPhone(@Body AppendRequest request);
+
+  @RemoteMethod(method ="POST", path="/vehicle")
+  public VehicleAppendResponse appendVehicle(@Body AppendRequest request);
+
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/SyncLookup.java b/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/SyncLookup.java
new file mode 100644
index 0000000..a6bcfaf
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/SyncLookup.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.streams.thedatagroup;
+
+import org.apache.juneau.http.annotation.Body;
+import org.apache.juneau.remote.RemoteInterface;
+import org.apache.juneau.rest.client.remote.RemoteMethod;
+import org.apache.streams.thedatagroup.api.EmailLookupRequest;
+import org.apache.streams.thedatagroup.api.IpLookupRequest;
+import org.apache.streams.thedatagroup.api.LookupResponse;
+import org.apache.streams.thedatagroup.api.PhoneLookupRequest;
+
+@RemoteInterface(path = "https://api.thedatagroup.com/v3/sync/lookup")
+public interface SyncLookup {
+
+  @RemoteMethod(method ="POST", path="/email")
+  public LookupResponse lookupEmail(@Body EmailLookupRequest request);
+
+  @RemoteMethod(method ="POST", path="/mobile")
+  public LookupResponse lookupMobile(@Body PhoneLookupRequest request);
+
+  @RemoteMethod(method ="POST", path="/ip")
+  public LookupResponse lookupIp(@Body IpLookupRequest request);
+
+  @RemoteMethod(method ="POST", path="/phone")
+  public LookupResponse lookupPhone(@Body PhoneLookupRequest request);
+
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/TheDataGroup.java b/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/TheDataGroup.java
new file mode 100755
index 0000000..e59771d
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/java/org/apache/streams/thedatagroup/TheDataGroup.java
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.streams.thedatagroup;
+
+import com.google.common.util.concurrent.Uninterruptibles;
+import org.apache.juneau.json.JsonParser;
+import org.apache.juneau.json.JsonSerializer;
+import org.apache.juneau.rest.client.RestCall;
+import org.apache.juneau.rest.client.RestClient;
+import org.apache.juneau.rest.client.RestClientBuilder;
+import org.apache.streams.config.ComponentConfigurator;
+import org.apache.streams.thedatagroup.api.AppendRequest;
+import org.apache.streams.thedatagroup.api.DemographicsAppendResponse;
+import org.apache.streams.thedatagroup.api.EmailAppendResponse;
+import org.apache.streams.thedatagroup.api.EmailLookupRequest;
+import org.apache.streams.thedatagroup.api.IpLookupRequest;
+import org.apache.streams.thedatagroup.api.LookupResponse;
+import org.apache.streams.thedatagroup.api.MobileAppendResponse;
+import org.apache.streams.thedatagroup.api.PhoneAppendResponse;
+import org.apache.streams.thedatagroup.api.PhoneLookupRequest;
+import org.apache.streams.thedatagroup.api.VehicleAppendResponse;
+import org.apache.streams.thedatagroup.config.TheDataGroupConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Implementation of api.pipl.com interfaces using juneau.
+ */
+public class TheDataGroup implements SyncAppend, SyncLookup {
+
+  private static final Logger LOGGER = LoggerFactory.getLogger(TheDataGroup.class);
+
+  private TheDataGroupConfiguration configuration;
+
+  JsonParser parser;
+  JsonSerializer serializer;
+
+  RestClientBuilder restClientBuilder;
+  RestClient restClient;
+
+  private static Map<TheDataGroupConfiguration, TheDataGroup> INSTANCE_MAP = new ConcurrentHashMap<>();
+
+  public static TheDataGroup getInstance() throws InstantiationException {
+    return getInstance(new ComponentConfigurator<>(TheDataGroupConfiguration.class).detectConfiguration());
+  }
+
+  public static TheDataGroup getInstance(TheDataGroupConfiguration configuration) throws InstantiationException {
+    if (INSTANCE_MAP.containsKey(configuration) && INSTANCE_MAP.get(configuration) != null) {
+      return INSTANCE_MAP.get(configuration);
+    } else {
+      TheDataGroup tdg = new TheDataGroup(configuration);
+      INSTANCE_MAP.put(configuration, tdg);
+      return INSTANCE_MAP.get(configuration);
+    }
+  }
+
+  private TheDataGroup(TheDataGroupConfiguration configuration) {
+    this.configuration = configuration;
+    this.parser = JsonParser.DEFAULT.builder()
+      .ignoreUnknownBeanProperties(true)
+      .build();
+    this.serializer = JsonSerializer.DEFAULT.builder()
+      .trimEmptyCollections(true)
+      .trimEmptyMaps(true)
+      .build();
+    this.restClientBuilder = RestClient.create()
+      .accept("application/json")
+      .contentType("application/json")
+      .disableCookieManagement()
+      .disableRedirectHandling()
+      .header("AuthorizationToken", configuration.getAuthorizationToken())
+      .header("x-api-key", configuration.getxApiKey())
+      .parser(parser)
+      .serializer(serializer)
+      .rootUrl(baseUrl());
+    if(configuration.getDebug() == true) {
+      this.restClientBuilder.debug();
+    }
+    this.restClient = restClientBuilder.build();
+  }
+
+  private String baseUrl() {
+    return "https://api.thedatagroup.com/v3/";
+  }
+
+  @Override
+  public DemographicsAppendResponse appendDemographics(AppendRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/append/demographics")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      DemographicsAppendResponse response = parser.parse(responseJson, DemographicsAppendResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new DemographicsAppendResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+
+  @Override
+  public EmailAppendResponse appendEmail(AppendRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/append/email")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      EmailAppendResponse response = parser.parse(responseJson, EmailAppendResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new EmailAppendResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+
+  @Override
+  public PhoneAppendResponse appendPhone(AppendRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/append/phone")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      PhoneAppendResponse response = parser.parse(responseJson, PhoneAppendResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new PhoneAppendResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+
+  @Override
+  public MobileAppendResponse appendMobile(AppendRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/append/mobile")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      MobileAppendResponse response = parser.parse(responseJson, MobileAppendResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new MobileAppendResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+
+  @Override
+  public VehicleAppendResponse appendVehicle(AppendRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/append/vehicle")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      VehicleAppendResponse response = parser.parse(responseJson, VehicleAppendResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new VehicleAppendResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+
+  @Override
+  public LookupResponse lookupEmail(EmailLookupRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/lookup/email")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      LookupResponse response = parser.parse(responseJson, LookupResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new LookupResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+
+  @Override
+  public LookupResponse lookupMobile(PhoneLookupRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/lookup/mobile")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      LookupResponse response = parser.parse(responseJson, LookupResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new LookupResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+
+  @Override
+  public LookupResponse lookupIp(IpLookupRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/lookup/ip")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      LookupResponse response = parser.parse(responseJson, LookupResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new LookupResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+
+  @Override
+  public LookupResponse lookupPhone(PhoneLookupRequest request) {
+    try {
+      RestCall call = restClient
+              .doPost(baseUrl() + "sync/lookup/phone")
+              .body(request)
+              .ignoreErrors();
+      String responseJson = call.getResponseAsString();
+      LookupResponse response = parser.parse(responseJson, LookupResponse.class);
+      return response;
+    } catch( Exception e ) {
+      LOGGER.error("Exception", e);
+      return new LookupResponse();
+    } finally {
+      Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/AppendRequest.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/AppendRequest.json
new file mode 100644
index 0000000..71eedec
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/AppendRequest.json
@@ -0,0 +1,39 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.AppendRequest",
+  "properties": {
+    "address_1": {
+      "type": "string",
+      "description": "The address to use in the request."
+    },
+    "address_2": {
+      "type": "string",
+      "description": "The address to use in the request."
+    },
+    "first_name": {
+      "type": "string",
+      "description": "The first name to use in the request."
+    },
+    "last_name": {
+      "type": "string",
+      "description": "The last name to use in the request."
+    },
+    "city": {
+      "type": "string",
+      "description": "The city to use in the request. You must provider either both the city and state, or the zipcode."
+    },
+    "state": {
+      "type": "string",
+      "description": "The state to use in the request, abbreviated. You must provider either both the city and state, or the zipcode."
+    },
+    "zipcode": {
+      "type": "string",
+      "description": "The zipcode to use in the request. You must provider either the zipcode, or both the city and state."
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponse.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponse.json
new file mode 100644
index 0000000..41b06e4
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponse.json
@@ -0,0 +1,36 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponse",
+  "properties": {
+    "address": {
+      "$ref" : "./DemographicsAppendResponseAddress.json"
+    },
+    "phones": {
+      "type": "array",
+      "items": {
+        "$ref" : "./DemographicsAppendResponsePhones.json"
+      }
+    },
+    "category_match": {
+      "type": "string",
+      "values": [
+        "ADDRESS",
+        "HOUSEHOLD",
+        "INDIVIDUAL",
+        "NAME_AND_ZIP",
+        "NONE"
+      ]
+    },
+    "life_styles": {
+      "$ref" : "./DemographicsAppendResponseLifeStyles.json"
+    },
+    "demographics": {
+      "$ref" : "./DemographicsAppendResponseDemographics.json"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseAddress.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseAddress.json
new file mode 100644
index 0000000..48f0bb9
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseAddress.json
@@ -0,0 +1,41 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseAddress",
+  "properties": {
+    "zipcode": {
+      "type" : "string"
+    },
+    "unit_number": {
+      "type" : "string"
+    },
+    "city": {
+      "type" : "string"
+    },
+    "post_direction": {
+      "type" : "string"
+    },
+    "street_number": {
+      "type" : "string"
+    },
+    "pre_direction": {
+      "type" : "string"
+    },
+    "street_type": {
+      "type" : "string"
+    },
+    "state": {
+      "type" : "string"
+    },
+    "unit_type": {
+      "type" : "string"
+    },
+    "street_name": {
+      "type" : "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographics.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographics.json
new file mode 100644
index 0000000..050f874
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographics.json
@@ -0,0 +1,31 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographics",
+  "properties": {
+    "level": {
+      "type" : "string",
+      "values": [
+        "ZIP_9",
+        "ZIP_7",
+        "ZIP_5"
+      ]
+    },
+    "person": {
+      "$ref" : "./DemographicsAppendResponseDemographicsPerson.json"
+    },
+    "residence": {
+      "$ref" : "./DemographicsAppendResponseDemographicsResidence.json"
+    },
+    "family": {
+      "$ref" : "./DemographicsAppendResponseDemographicsFamily.json"
+    },
+    "vehicle": {
+      "$ref" : "./DemographicsAppendResponseDemographicsVehicle.json"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsFamily.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsFamily.json
new file mode 100644
index 0000000..73945bb
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsFamily.json
@@ -0,0 +1,26 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsFamily",
+  "properties": {
+    "is_single_parent": {
+      "type" : "boolean"
+    },
+    "children": {
+      "$ref" : "./DemographicsAppendResponseDemographicsFamilyChildren.json"
+    },
+    "married": {
+      "type": "string",
+      "values": [
+        "INFERRED_MARRIED",
+        "INFERRED_SINGLE",
+        "SINGLE",
+        "MARRIED"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsFamilyChildren.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsFamilyChildren.json
new file mode 100644
index 0000000..293f242
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsFamilyChildren.json
@@ -0,0 +1,31 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsFamilyChildren",
+  "properties": {
+    "has_children": {
+      "type" : "boolean"
+    },
+    "number_children": {
+      "type": "string",
+      "values": [
+        "A",
+        "B",
+        "C"
+      ]
+    },
+    "children_age": {
+      "type": "string",
+      "values": [
+        "A",
+        "B",
+        "C",
+        "D"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPerson.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPerson.json
new file mode 100644
index 0000000..f2b3b8b
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPerson.json
@@ -0,0 +1,54 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponsePhones",
+  "properties": {
+    "education": {
+      "$ref" : "./DemographicsAppendResponseDemographicsPersonEducation.json"
+    },
+    "gender": {
+      "type": "string",
+      "values": [
+        "M",
+        "F",
+        "U"
+      ]
+    },
+    "ethnicity": {
+      "type": "string",
+      "values": [
+        "ASIAN",
+        "AFRICAN_AMERICAN",
+        "HISPANIC"
+      ]
+    },
+    "race": {
+      "$ref" : "./DemographicsAppendResponseDemographicsPersonRace.json"
+    },
+    "date_of_birth": {
+      "type" : "string"
+    },
+    "worker_type": {
+      "$ref" : "./DemographicsAppendResponseDemographicsPersonWorkerType.json"
+    },
+    "percent_mail_order_respondent": {
+      "type" : "integer"
+    },
+    "language": {
+      "$ref" : "./DemographicsAppendResponseDemographicsPersonLanguage.json"
+    },
+    "finances": {
+      "$ref" : "./DemographicsAppendResponseDemographicsPersonFinances.json"
+    },
+    "is_senior": {
+      "type" : "boolean"
+    },
+    "age": {
+      "type" : "integer"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonEducation.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonEducation.json
new file mode 100644
index 0000000..05aa9d5
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonEducation.json
@@ -0,0 +1,23 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsPersonEducation",
+  "properties": {
+    "level": {
+      "type": "string",
+      "values": [
+        "HIGH_SCHOOL",
+        "COLLEGE",
+        "GRADUATE_SCHOOL",
+        "VOCATIONAL_OR_TECHNICAL"
+      ]
+    },
+    "median_years_schooling": {
+      "type": "integer"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonFinances.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonFinances.json
new file mode 100644
index 0000000..805214d
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonFinances.json
@@ -0,0 +1,44 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsPersonFinances",
+  "properties": {
+    "estimated_income": {
+      "type": "string",
+      "values": [
+        "A",
+        "B",
+        "C",
+        "D",
+        "E",
+        "F",
+        "G",
+        "H",
+        "I"
+      ]
+    },
+    "estimated_net_worth": {
+      "type": "string",
+      "values": [
+        "A",
+        "B",
+        "C",
+        "D",
+        "E",
+        "F",
+        "G",
+        "H"
+      ]
+    },
+    "is_charity_donar": {
+      "type": "boolean"
+    },
+    "uses_credit_card": {
+      "type": "boolean"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonLanguage.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonLanguage.json
new file mode 100644
index 0000000..bb7e894
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonLanguage.json
@@ -0,0 +1,20 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsPersonRace",
+  "properties": {
+    "percent_spanish_speaker": {
+      "type": "integer"
+    },
+    "percent_asian_speaker": {
+      "type": "integer"
+    },
+    "percent_english_speaker": {
+      "type": "integer"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonRace.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonRace.json
new file mode 100644
index 0000000..47f7b76
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonRace.json
@@ -0,0 +1,23 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsPersonRace",
+  "properties": {
+    "percent_hispanic": {
+      "type": "integer"
+    },
+    "percent_black": {
+      "type": "integer"
+    },
+    "percent_white": {
+      "type": "integer"
+    },
+    "percent_asian": {
+      "type": "integer"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonWorkerType.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonWorkerType.json
new file mode 100644
index 0000000..d3b95e8
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsPersonWorkerType.json
@@ -0,0 +1,20 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsPersonRace",
+  "properties": {
+    "percent_white_collar": {
+      "type": "integer"
+    },
+    "percent_blue_collar": {
+      "type": "integer"
+    },
+    "percent_other": {
+      "type": "integer"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsResidence.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsResidence.json
new file mode 100644
index 0000000..8a0dd6c
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsResidence.json
@@ -0,0 +1,76 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsResidence",
+  "properties": {
+    "homeowner": {
+      "type": "string",
+      "values": [
+        "TENANT",
+        "OWNER",
+        "SINGLE",
+        "MARRIED"
+      ]
+    },
+    "has_pool": {
+      "type" : "boolean"
+    },
+    "estimated_market_value": {
+      "type": "string",
+      "values": [
+        "A",
+        "B",
+        "C",
+        "D",
+        "E",
+        "F",
+        "G",
+        "H",
+        "I",
+        "J",
+        "K",
+        "L",
+        "M",
+        "N",
+        "O",
+        "P",
+        "Q",
+        "R",
+        "S"
+      ]
+    },
+    "length_of_residence": {
+      "type": "integer"
+    },
+    "year_home_built": {
+      "type": "integer"
+    },
+    "median_house_value": {
+      "type": "string",
+      "values": [
+        "A",
+        "B",
+        "C",
+        "D",
+        "E",
+        "F",
+        "G",
+        "H",
+        "I"
+      ]
+    },
+    "dwelling": {
+      "$ref": "./DemographicsAppendResponseDemographicsResidenceDwelling.json"
+    },
+    "is_mobile_home": {
+      "type": "integer"
+    },
+    "has_fireplace": {
+      "type": "integer"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsResidenceDwelling.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsResidenceDwelling.json
new file mode 100644
index 0000000..dbd240e
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsResidenceDwelling.json
@@ -0,0 +1,24 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsResidence",
+  "properties": {
+    "percent_single_family": {
+      "type": "integer"
+    },
+    "type": {
+      "type": "string",
+      "values": [
+        "SINGLE_FAMILY",
+        "MULTIPLE_FAMILY"
+      ]
+    },
+    "percent_multiple_family": {
+      "type": "integer"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsVehicle.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsVehicle.json
new file mode 100644
index 0000000..e177532
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseDemographicsVehicle.json
@@ -0,0 +1,23 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseDemographicsVehicle",
+  "properties": {
+    "owns_suv_vehicle": {
+      "type" : "boolean"
+    },
+    "owns_luxury_vehicle": {
+      "type" : "boolean"
+    },
+    "owns_pickup_vehicle": {
+      "type" : "boolean"
+    },
+    "percent_vehicle_owner": {
+      "type" : "boolean"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStyles.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStyles.json
new file mode 100644
index 0000000..efdf634
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStyles.json
@@ -0,0 +1,32 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseLifeStyles",
+  "properties": {
+    "book": {
+      "$ref": "./DemographicsAppendResponseLifeStylesBook.json"
+    },
+    "apparel": {
+      "$ref": "./DemographicsAppendResponseLifeStylesApparel.json"
+    },
+    "value_shopper": {
+      "type": "boolean"
+    },
+    "interests": {
+      "$ref": "./DemographicsAppendResponseLifeStylesInterests.json"
+    },
+    "pet": {
+      "type": "string",
+      "values": [
+        "HAS_PETS",
+        "EQUESTRIAN",
+        "CAT",
+        "DOG"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesApparel.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesApparel.json
new file mode 100644
index 0000000..fed1961
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesApparel.json
@@ -0,0 +1,28 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseLifeStylesApparel",
+  "properties": {
+    "men": {
+      "type": "string",
+      "values": [
+        "PURCHASED",
+        "PURCHASED_BIG_AND_TALL"
+      ]
+    },
+    "women": {
+      "type": "string",
+      "values": [
+        "PURCHASED",
+        "PURCHASED_PLUS_SIZE"
+      ]
+    },
+    "child": {
+      "type": "boolean"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesBook.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesBook.json
new file mode 100644
index 0000000..a20d0cb
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesBook.json
@@ -0,0 +1,17 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseLifeStylesBook",
+  "properties": {
+    "reader": {
+      "type": "boolean"
+    },
+    "buyer": {
+      "type": "boolean"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesInterests.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesInterests.json
new file mode 100644
index 0000000..aa1103f
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponseLifeStylesInterests.json
@@ -0,0 +1,116 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponseLifeStylesInterests",
+  "properties": {
+    "home_and_garden": {
+      "type": "string",
+      "values": [
+        "SEWING_AND_KNITTING",
+        "WOODWORKING",
+        "PHOTOGRAPHY",
+        "HOME_AND_GARDEN"
+      ]
+    },
+    "motercycling": {
+      "type": "boolean"
+    },
+    "sports": {
+      "type": "string",
+      "values": [
+        "GENERAL_INTEREST",
+        "BASEBALL",
+        "FOOTBALL",
+        "GOLF",
+        "TENNIS",
+        "RACING"
+      ]
+    },
+    "self_improvement": {
+      "type": "string",
+      "values": [
+        "HEALTH_AND_MEDICAL",
+        "DIETING_WEIGHT_LOSS",
+        "SELF_IMPROVEMENT"
+      ]
+    },
+    "gambling": {
+      "type": "boolean"
+    },
+    "collectibles": {
+      "type": "string",
+      "values": [
+        "GENERAL_INTEREST",
+        "ANTIQUES_INTEREST",
+        "SPORTS_INTEREST"
+      ]
+    },
+    "technology": {
+      "type": "boolean"
+    },
+    "outdoors": {
+      "type": "string",
+      "values": [
+        "GENERAL_INTEREST",
+        "SNOW_SPORTS",
+        "WATER_SPORTS",
+        "HUNTING_AND_FISHING"
+      ]
+    },
+    "fitness": {
+      "type": "string",
+      "values": [
+        "HEALTH_EXERCISE",
+        "RUNNING",
+        "WALKING",
+        "AEROBICS"
+      ]
+    },
+    "home_improvement": {
+      "type": "string",
+      "values": [
+        "GENERAL_INTEREST",
+        "DIY_INTEREST"
+      ]
+    },
+    "cooking": {
+      "type": "string",
+      "values": [
+        "GOURMET_FOOD_AND_WINE",
+        "COOKING",
+        "NATURAL_FOODS"
+      ]
+    },
+    "auto_parts": {
+      "type": "boolean"
+    },
+    "investing": {
+      "type": "boolean"
+    },
+    "boating": {
+      "type": "boolean"
+    },
+    "travel": {
+      "type": "string",
+      "values": [
+        "TRAVEL",
+        "DOMESTIC",
+        "INTERNATIONAL",
+        "CRUISE"
+      ]
+    },
+    "arts": {
+      "type": "string",
+      "values": [
+        "ARTS_INTEREST",
+        "AVID_MUSIC_LISTENER",
+        "ANTIQUES_INTEREST",
+        "PERFORMING_ARTS_INTEREST"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponsePhones.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponsePhones.json
new file mode 100644
index 0000000..0632c16
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/DemographicsAppendResponsePhones.json
@@ -0,0 +1,14 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.DemographicsAppendResponsePhones",
+  "properties": {
+    "phone": {
+      "type" : "integer"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/EmailAppendResponse.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/EmailAppendResponse.json
new file mode 100644
index 0000000..d268260
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/EmailAppendResponse.json
@@ -0,0 +1,23 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.EmailAppendResponse",
+  "properties": {
+    "address": {
+      "$ref" : "./DemographicsAppendResponseAddress.json"
+    },
+    "first_name": {
+      "type": "string"
+    },
+    "last_name": {
+      "type": "string"
+    },
+    "email": {
+      "type": "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/EmailLookupRequest.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/EmailLookupRequest.json
new file mode 100644
index 0000000..54902b6
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/EmailLookupRequest.json
@@ -0,0 +1,14 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.EmailLookupRequest",
+  "properties": {
+    "email": {
+      "type": "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/IpLookupRequest.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/IpLookupRequest.json
new file mode 100644
index 0000000..1ce8f19
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/IpLookupRequest.json
@@ -0,0 +1,14 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.IpLookupRequest",
+  "properties": {
+    "phone": {
+      "type": "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/LookupResponse.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/LookupResponse.json
new file mode 100644
index 0000000..d3cbcad
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/LookupResponse.json
@@ -0,0 +1,20 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.LookupResponse",
+  "properties": {
+    "address": {
+      "$ref" : "./DemographicsAppendResponseAddress.json"
+    },
+    "first_name": {
+      "type": "string"
+    },
+    "last_name": {
+      "type": "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/MobileAppendResponse.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/MobileAppendResponse.json
new file mode 100644
index 0000000..d3ae950
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/MobileAppendResponse.json
@@ -0,0 +1,23 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.MobileAppendResponse",
+  "properties": {
+    "address": {
+      "$ref" : "./DemographicsAppendResponseAddress.json"
+    },
+    "first_name": {
+      "type": "string"
+    },
+    "last_name": {
+      "type": "string"
+    },
+    "phone": {
+      "$ref" : "./PhoneAppendResponseItem.json"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneAppendResponse.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneAppendResponse.json
new file mode 100644
index 0000000..273b85a
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneAppendResponse.json
@@ -0,0 +1,23 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.PhoneAppendResponse",
+  "properties": {
+    "address": {
+      "$ref" : "./DemographicsAppendResponseAddress.json"
+    },
+    "first_name": {
+      "type": "string"
+    },
+    "last_name": {
+      "type": "string"
+    },
+    "phone": {
+      "$ref" : "./PhoneAppendResponseItem.json"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneAppendResponseItem.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneAppendResponseItem.json
new file mode 100644
index 0000000..13600a8
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneAppendResponseItem.json
@@ -0,0 +1,17 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.PhoneAppendResponseItem",
+  "properties": {
+    "phone_type": {
+      "type" : "string"
+    },
+    "phone": {
+      "type" : "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneLookupRequest.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneLookupRequest.json
new file mode 100644
index 0000000..855e221
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/PhoneLookupRequest.json
@@ -0,0 +1,14 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.PhoneLookupRequest",
+  "properties": {
+    "phone": {
+      "type": "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/VehicleAppendResponse.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/VehicleAppendResponse.json
new file mode 100644
index 0000000..8913366
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/VehicleAppendResponse.json
@@ -0,0 +1,26 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.VehicleAppendResponse",
+  "properties": {
+    "address": {
+      "$ref" : "./DemographicsAppendResponseAddress.json"
+    },
+    "first_name": {
+      "type": "string"
+    },
+    "last_name": {
+      "type": "string"
+    },
+    "vehicles": {
+      "type": "array",
+      "items": {
+        "$ref" : "./VehicleAppendResponseItem.json"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/VehicleAppendResponseItem.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/VehicleAppendResponseItem.json
new file mode 100644
index 0000000..76b80c0
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/api/VehicleAppendResponseItem.json
@@ -0,0 +1,20 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaType": "org.apache.streams.thedatagroup.api.VehicleAppendResponseItem",
+  "properties": {
+    "year": {
+      "type" : "string"
+    },
+    "make": {
+      "type" : "string"
+    },
+    "model": {
+      "type" : "string"
+    }
+  }
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/config/TheDataGroupConfiguration.json b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/config/TheDataGroupConfiguration.json
new file mode 100755
index 0000000..c3ecc25
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/main/jsonschema/org/apache/streams/thedatagroup/config/TheDataGroupConfiguration.json
@@ -0,0 +1,21 @@
+{
+  "type": "object",
+  "$schema": "http://json-schema.org/draft-03/schema",
+  "$license": [
+    "http://www.apache.org/licenses/LICENSE-2.0"
+  ],
+  "id": "#",
+  "javaInterfaces": ["java.io.Serializable"],
+  "javaType": "org.apache.streams.thedatagroup.config.TheDataGroupConfiguration",
+  "properties": {
+    "debug": {
+      "type": "boolean"
+    },
+    "AuthorizationToken": {
+      "type": "string"
+    },
+    "x-api-key": {
+      "type": "string"
+    }
+  }
+}
diff --git a/streams-contrib/streams-processor-thedatagroup/src/test/java/org/apache/streams/thedatagroup/test/TheDataGroupIT.java b/streams-contrib/streams-processor-thedatagroup/src/test/java/org/apache/streams/thedatagroup/test/TheDataGroupIT.java
new file mode 100644
index 0000000..33a5a8e
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/test/java/org/apache/streams/thedatagroup/test/TheDataGroupIT.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.streams.thedatagroup.test;
+
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import com.typesafe.config.ConfigRenderOptions;
+import org.apache.juneau.json.JsonParser;
+import org.apache.streams.config.ComponentConfigurator;
+import org.apache.streams.config.StreamsConfigurator;
+import org.apache.streams.thedatagroup.SyncAppend;
+import org.apache.streams.thedatagroup.TheDataGroup;
+import org.apache.streams.thedatagroup.api.AppendRequest;
+import org.apache.streams.thedatagroup.api.DemographicsAppendResponse;
+import org.apache.streams.thedatagroup.config.TheDataGroupConfiguration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.io.File;
+
+import static java.util.Objects.nonNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Integration Tests for all implemented thedatagroup.com endpoints.
+ */
+public class TheDataGroupIT {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(TheDataGroupIT.class);
+
+    private static String configfile = "target/test-classes/TheDataGroupIT/TheDataGroupIT.conf";
+
+    private static TheDataGroupConfiguration config;
+
+    private static Config testsconfig;
+
+    @BeforeClass(alwaysRun = true)
+    public void setup() throws Exception {
+        File conf = new File(configfile);
+        Assert.assertTrue (conf.exists());
+        Assert.assertTrue (conf.canRead());
+        Assert.assertTrue (conf.isFile());
+        StreamsConfigurator.addConfig(ConfigFactory.parseFileAnySyntax(conf));
+        config = new ComponentConfigurator<>(TheDataGroupConfiguration.class).detectConfiguration();
+        testsconfig = StreamsConfigurator.getConfig().getConfig("org.apache.streams.thedatagroup.test.TheDataGroupIT");
+    }
+
+    @Test
+    public void testDemographicsAppend() throws Exception {
+        SyncAppend syncAppend = TheDataGroup.getInstance(config);
+        Config requestConfig = StreamsConfigurator.getConfig().getConfig("org.apache.streams.thedatagroup.test.TheDataGroupIT.testAppendDemographics");
+        AppendRequest req = JsonParser.DEFAULT.parse(requestConfig.root().render(ConfigRenderOptions.concise()), AppendRequest.class);
+        DemographicsAppendResponse response = syncAppend.appendDemographics(req);
+        nonNull(response);
+    }
+
+}
\ No newline at end of file
diff --git a/streams-contrib/streams-processor-thedatagroup/src/test/resources/TheDataGroupIT/TheDataGroupIT.conf b/streams-contrib/streams-processor-thedatagroup/src/test/resources/TheDataGroupIT/TheDataGroupIT.conf
new file mode 100644
index 0000000..c99057b
--- /dev/null
+++ b/streams-contrib/streams-processor-thedatagroup/src/test/resources/TheDataGroupIT/TheDataGroupIT.conf
@@ -0,0 +1,27 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+include "../../../../../thedatagroup.conf"
+org.apache.streams.thedatagroup.test.TheDataGroupIT {
+  testAppendDemographics {
+    first_name="Steve"
+    last_name="Blackmon"
+    address_1="555 E 5th St #2701"
+    city="Austin"
+    state="TX"
+    zipcode="78701"
+  }
+}
\ No newline at end of file