diff --git a/config/install/lingotek.settings.yml b/config/install/lingotek.settings.yml
index c14832a..ff6023b 100644
--- a/config/install/lingotek.settings.yml
+++ b/config/install/lingotek.settings.yml
@@ -15,6 +15,35 @@ preference:
   contrib:
     paragraphs:
       enable_bulk_management: false
+intelligence:
+  business_unit: null
+  business_division: null
+  campaign_id: null
+  campaign_rating: 0
+  channel: null
+  contact_name: null
+  contact_email: null
+  content_description: null
+  external_style_id: null
+  purchase_order: null
+  region: null
+  use_author: true
+  default_author_email: null
+  use_author_email: true
+  use_contact_email_for_author: false
+  use_business_unit: true
+  use_business_division: true
+  use_campaign_id: true
+  use_campaign_rating: true
+  use_channel: true
+  use_contact_name: true
+  use_contact_email: true
+  use_content_description: true
+  use_external_style_id: true
+  use_purchase_order: true
+  use_region: true
+  use_base_domain: true
+  use_reference_url: true
 account:
   use_production: false
   sandbox_host: 'https://cms.lingotek.com'
diff --git a/config/schema/lingotek.schema.yml b/config/schema/lingotek.schema.yml
index d220916..3e9ade9 100644
--- a/config/schema/lingotek.schema.yml
+++ b/config/schema/lingotek.schema.yml
@@ -54,6 +54,94 @@ lingotek.settings:
                 enable_bulk_management:
                   type: boolean
                   label: 'Enable bulk management for paragraphs'
+    intelligence:
+      type: mapping
+      label: 'Lingotek Intelligence settings'
+      mapping:
+        use_author:
+          type: boolean
+          label: 'Permission to Include Author'
+        default_author_email:
+          type: string
+          label: 'Default Author Email'
+        use_author_email:
+          type: boolean
+          label: 'Active'
+        use_contact_email_for_author:
+          type: boolean
+          label: 'Same as Contact Email'
+        business_unit:
+          type: string
+          label: 'Business Unit'
+        use_business_unit:
+          type: boolean
+          label: 'Active'
+        business_division:
+          type: string
+          label: 'Business Division'
+        use_business_division:
+          type: boolean
+          label: 'Active'
+        campaign_id:
+          type: string
+          label: 'Campaign Id'
+        use_campaign_id:
+          type: boolean
+          label: 'Active'
+        campaign_rating:
+          type: integer
+          label: 'Campaign Rating'
+        use_campaign_rating:
+          type: boolean
+          label: 'Active'
+        channel:
+          type: string
+          label: 'Channel'
+        use_channel:
+          type: boolean
+          label: 'Active'
+        contact_name:
+          type: string
+          label: 'Contact Name'
+        use_contact_name:
+          type: boolean
+          label: 'Active'
+        contact_email:
+          type: string
+          label: 'Contact Email'
+        use_contact_email:
+          type: boolean
+          label: 'Active'
+        content_description:
+          type: string
+          label: 'Content Description'
+        use_content_description:
+          type: boolean
+          label: 'Active'
+        external_style_id:
+          type: string
+          label: 'External Style ID'
+        use_external_style_id:
+          type: boolean
+          label: 'Active'
+        purchase_order:
+          type: string
+          label: 'Purchase Order'
+        use_purchase_order:
+          type: boolean
+          label: 'Active'
+        region:
+          type: string
+          label: 'Region'
+        use_region:
+          type: boolean
+          label: 'Active'
+        use_base_domain:
+          type: boolean
+          label: 'Active'
+        use_reference_url:
+          type: boolean
+          label: 'Active'
     account:
       type: mapping
       label: 'Account'
@@ -160,6 +248,93 @@ lingotek.profile.*:
     workflow:
       type: string
       label: 'TM Workflow'
+    content_metadata:
+      type: mapping
+      mapping:
+        use_author:
+          type: boolean
+          label: 'Permission to Include Author'
+        default_author_email:
+          type: string
+          label: 'Default Author Email'
+        use_author_email:
+          type: boolean
+          label: 'Active'
+        use_contact_email_for_author:
+          type: boolean
+          label: 'Same as Contact Email'
+        business_unit:
+          type: string
+          label: 'Business Unit'
+        use_business_unit:
+          type: boolean
+          label: 'Active'
+        business_division:
+          type: string
+          label: 'Business Division'
+        use_business_division:
+          type: boolean
+          label: 'Active'
+        campaign_id:
+          type: string
+          label: 'Campaign Id'
+        use_campaign_id:
+          type: boolean
+          label: 'Active'
+        campaign_rating:
+          type: integer
+          label: 'Campaign Rating'
+        use_campaign_rating:
+          type: boolean
+          label: 'Active'
+        channel:
+          type: string
+          label: 'Channel'
+        use_channel:
+          type: boolean
+          label: 'Active'
+        contact_name:
+          type: string
+          label: 'Contact Name'
+        use_contact_name:
+          type: boolean
+          label: 'Active'
+        contact_email:
+          type: string
+          label: 'Contact Email'
+        use_contact_email:
+          type: boolean
+          label: 'Active'
+        content_description:
+          type: string
+          label: 'Content Description'
+        use_content_description:
+          type: boolean
+          label: 'Active'
+        external_style_id:
+          type: string
+          label: 'External Style ID'
+        use_external_style_id:
+          type: boolean
+          label: 'Active'
+        purchase_order:
+          type: string
+          label: 'Purchase Order'
+        use_purchase_order:
+          type: boolean
+          label: 'Active'
+        region:
+          type: string
+          label: 'Region'
+        use_region:
+          type: boolean
+          label: 'Active'
+        use_base_domain:
+          type: boolean
+          label: 'Active'
+        use_reference_url:
+          type: boolean
+          label: 'Active'
     language_overrides:
       type: sequence
       label: 'Target language settings overrides'
diff --git a/css/lingotek.settings.css b/css/lingotek.settings.css
index c666835..7d362da 100644
--- a/css/lingotek.settings.css
+++ b/css/lingotek.settings.css
@@ -4,3 +4,7 @@ input.field-property-checkbox {
 div.profile-language-overrides-container {
     margin-left: 50px;
 }
+
+.indent-form-item {
+  margin-left: 25px;
+}
diff --git a/lingotek.services.yml b/lingotek.services.yml
index c4f48b7..6066d7b 100644
--- a/lingotek.services.yml
+++ b/lingotek.services.yml
@@ -19,6 +19,9 @@ services:
     arguments: ['@entity_type.bundle.info']
   lingotek.configuration:
     class: Drupal\lingotek\LingotekConfigurationService
+  lingotek.intelligence:
+    class: Drupal\lingotek\LingotekIntelligenceService
+    arguments: ['@config.factory']
   lingotek.moderation_factory:
     class: Drupal\lingotek\Moderation\LingotekModerationFactory
     arguments: ['@config.factory']
diff --git a/src/Controller/LingotekSettingsController.php b/src/Controller/LingotekSettingsController.php
index 9715ba1..d44c483 100644
--- a/src/Controller/LingotekSettingsController.php
+++ b/src/Controller/LingotekSettingsController.php
@@ -5,6 +5,7 @@ namespace Drupal\lingotek\Controller;
 use Drupal\Component\Serialization\Json;
 use Drupal\Core\Form\FormState;
 use Drupal\Core\Url;
+use Drupal\lingotek\Form\LingotekIntelligenceMetadataForm;
 use Drupal\lingotek\Form\LingotekSettingsTabIntegrationsForm;
 
 class LingotekSettingsController extends LingotekControllerBase {
@@ -14,15 +15,16 @@ class LingotekSettingsController extends LingotekControllerBase {
       return $redirect;
     }
 
-    $settings_tab = array (
+    $settings_tab = [
       $this->getLingotekForm('LingotekSettingsTabAccountForm'),
       $this->getLingotekForm('LingotekSettingsTabContentForm'),
       $this->getLingotekForm('LingotekSettingsTabConfigurationForm'),
       $this->getProfileListForm(),
+      $this->getIntelligenceMetadataForm(),
       $this->getLingotekForm('LingotekSettingsTabPreferencesForm'),
       $this->getIntegrationsSettingsForm(),
       $this->getLingotekForm('LingotekSettingsTabUtilitiesForm'),
-    );
+    ];
 
     return $settings_tab;
   }
@@ -92,4 +94,9 @@ class LingotekSettingsController extends LingotekControllerBase {
     return $profiles_modal;
   }
 
+  public function getIntelligenceMetadataForm() {
+    $form = $this->formBuilder->getForm(LingotekIntelligenceMetadataForm::class, $this->request, \Drupal::service('lingotek.intelligence'));
+    return $form;
+  }
+
 }
diff --git a/src/Entity/LingotekProfile.php b/src/Entity/LingotekProfile.php
index 18de3ff..ef35734 100644
--- a/src/Entity/LingotekProfile.php
+++ b/src/Entity/LingotekProfile.php
@@ -8,6 +8,7 @@
 namespace Drupal\lingotek\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
+use Drupal\lingotek\LingotekIntelligenceMetadataInterface;
 use Drupal\lingotek\LingotekProfileInterface;
 
 /**
@@ -41,6 +42,7 @@ use Drupal\lingotek\LingotekProfileInterface;
  *     "vault",
  *     "project",
  *     "workflow",
+ *     "content_metadata",
  *     "language_overrides",
  *   },
  *   links = {
@@ -50,7 +52,7 @@ use Drupal\lingotek\LingotekProfileInterface;
  *   },
  * )
  */
-class LingotekProfile extends ConfigEntityBase implements LingotekProfileInterface {
+class LingotekProfile extends ConfigEntityBase implements LingotekProfileInterface, LingotekIntelligenceMetadataInterface {
 
   /**
    * The profile ID (machine name).
@@ -123,6 +125,463 @@ class LingotekProfile extends ConfigEntityBase implements LingotekProfileInterfa
   protected $language_overrides = [];
 
   /**
+   * Metadata for content with this translation profile
+   *
+   * @var array
+   */
+  protected $content_metadata = [
+    'business_unit' => '',
+    'business_division' => '',
+    'campaign_id' => '',
+    'campaign_rating' => 0,
+    'channel' => '',
+    'contact_name' => '',
+    'contact_email' => '',
+    'content_description' => '',
+    'external_style_id' => '',
+    'purchase_order' => '',
+    'region' => '',
+    'use_author' => TRUE,
+    'default_author_email' => '',
+    'use_author_email' => TRUE,
+    'use_contact_email_for_author' => FALSE,
+    'use_business_unit' => TRUE,
+    'use_business_division' => TRUE,
+    'use_campaign_id' => TRUE,
+    'use_campaign_rating' => TRUE,
+    'use_channel' => TRUE,
+    'use_contact_name' => TRUE,
+    'use_contact_email' => TRUE,
+    'use_content_description' => TRUE,
+    'use_external_style_id' => TRUE,
+    'use_purchase_order' => TRUE,
+    'use_region' => TRUE,
+    'use_base_domain' => TRUE,
+    'use_reference_url' => TRUE,
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBusinessUnit() {
+    return $this->content_metadata['business_unit'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBusinessUnit($business_unit) {
+    $this->content_metadata['business_unit'] = $business_unit;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBusinessDivision() {
+    return $this->content_metadata['business_division'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBusinessDivision($business_division) {
+    $this->content_metadata['business_division'] = $business_division;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCampaignId() {
+    return $this->content_metadata['campaign_id'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCampaignId($campaign_id) {
+    $this->content_metadata['campaign_id'] = $campaign_id;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCampaignRating() {
+    return $this->content_metadata['campaign_rating'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCampaignRating($campaign_rating) {
+    $this->content_metadata['campaign_rating'] = $campaign_rating;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getChannel() {
+    return $this->content_metadata['channel'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setChannel($channel) {
+    $this->content_metadata['channel'] = $channel;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactName() {
+    return $this->content_metadata['contact_name'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactName($contact_name) {
+    $this->content_metadata['contact_name'] = $contact_name;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactEmail() {
+    return $this->content_metadata['contact_email'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactEmail($contact_email) {
+    $this->content_metadata['contact_email'] = $contact_email;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContentDescription() {
+    return $this->content_metadata['content_description'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContentDescription($content_description) {
+    $this->content_metadata['content_description'] = $content_description;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPurchaseOrder() {
+    return $this->content_metadata['purchase_order'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setPurchaseOrder($purchase_order) {
+    $this->content_metadata['purchase_order'] = $purchase_order;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getExternalStyleId() {
+    return $this->content_metadata['external_style_id'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setExternalStyleId($external_style_id) {
+    $this->content_metadata['external_style_id'] = $external_style_id;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRegion() {
+    return $this->content_metadata['region'];
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setRegion($region) {
+    $this->content_metadata['region'] = $region;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAuthorPermission() {
+    return $this->content_metadata['use_author'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAuthorPermission($use_author) {
+    $this->content_metadata['use_author'] = $use_author;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDefaultAuthorEmail() {
+    return $this->content_metadata['default_author_email'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setDefaultAuthorEmail($default_author_email) {
+    $this->content_metadata['default_author_email'] = $default_author_email;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAuthorEmailPermission() {
+    return $this->content_metadata['use_author_email'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAuthorEmailPermission($use_author_email) {
+    $this->content_metadata['use_author_email'] = $use_author_email;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactEmailForAuthorPermission() {
+    return $this->content_metadata['use_contact_email_for_author'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactEmailForAuthorPermission($use_contact_email_for_author) {
+    $this->content_metadata['use_contact_email_for_author'] = $use_contact_email_for_author;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBusinessUnitPermission() {
+    return $this->content_metadata['use_business_unit'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBusinessUnitPermission($use_business_unit) {
+    $this->content_metadata['use_business_unit'] = $use_business_unit;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBusinessDivisionPermission() {
+    return $this->content_metadata['use_business_division'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBusinessDivisionPermission($use_business_division) {
+    $this->content_metadata['use_business_division'] = $use_business_division;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCampaignIdPermission() {
+    return $this->content_metadata['use_campaign_id'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCampaignIdPermission($use_campaign_id) {
+    $this->content_metadata['use_campaign_id'] = $use_campaign_id;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCampaignRatingPermission() {
+    return $this->content_metadata['use_campaign_rating'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCampaignRatingPermission($use_campaign_rating) {
+    $this->content_metadata['use_campaign_rating'] = $use_campaign_rating;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getChannelPermission() {
+    return $this->content_metadata['use_channel'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setChannelPermission($use_channel) {
+    $this->content_metadata['use_channel'] = $use_channel;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactNamePermission() {
+    return $this->content_metadata['use_contact_name'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactNamePermission($use_contact_name) {
+    $this->content_metadata['use_contact_name'] = $use_contact_name;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactEmailPermission() {
+    return $this->content_metadata['use_contact_email'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactEmailPermission($use_contact_email) {
+    $this->content_metadata['use_contact_email'] = $use_contact_email;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContentDescriptionPermission() {
+    return $this->content_metadata['use_content_description'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContentDescriptionPermission($use_content_description) {
+    $this->content_metadata['use_content_description'] = $use_content_description;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getExternalStyleIdPermission() {
+    return $this->content_metadata['use_external_style_id'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setExternalStyleIdPermission($use_external_style_id) {
+    $this->content_metadata['use_external_style_id'] = $use_external_style_id;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPurchaseOrderPermission() {
+    return $this->content_metadata['use_purchase_order'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setPurchaseOrderPermission($use_purchase_order) {
+    $this->content_metadata['use_purchase_order'] = $use_purchase_order;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRegionPermission() {
+    return $this->content_metadata['use_region'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setRegionPermission($use_region) {
+    $this->content_metadata['use_region'] = $use_region;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseDomainPermission() {
+    return $this->content_metadata['use_base_domain'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBaseDomainPermission($use_base_domain) {
+    $this->content_metadata['use_base_domain'] = $use_base_domain;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getReferenceUrlPermission() {
+    return $this->content_metadata['use_reference_url'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setReferenceUrlPermission($use_reference_url) {
+    $this->content_metadata['use_reference_url'] = $use_reference_url;
+    return $this;
+  }
+
+  /**
    * {@inheritdoc}
    */
   public function isLocked() {
diff --git a/src/Form/LingotekIntelligenceMetadataForm.php b/src/Form/LingotekIntelligenceMetadataForm.php
new file mode 100644
index 0000000..cb37961
--- /dev/null
+++ b/src/Form/LingotekIntelligenceMetadataForm.php
@@ -0,0 +1,362 @@
+<?php
+
+namespace Drupal\lingotek\Form;
+
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Helper class for creating the form for setting up the intelligence metadata.
+ *
+ * @package Drupal\lingotek\Form
+ */
+class LingotekIntelligenceMetadataForm extends FormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'lingotek.intelligence_metadata_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $metadata = $this->getIntelligenceMetadata($form_state);
+
+    $form['intelligence_metadata'] = [
+      '#type' => 'details',
+      '#title' => $this->t('Lingotek Intelligence Metadata'),
+      '#tree' => TRUE,
+    ];
+
+    $form['intelligence_metadata']['use_author'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Content\'s Author name and email to be tracked',
+      '#default_value' => $metadata->getAuthorPermission(),
+    ];
+
+    $form['intelligence_metadata']['use_author_email'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Content Author\'s email to be tracked',
+      '#default_value' => $metadata->getAuthorEmailPermission(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_author]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_contact_email_for_author'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'checkbox',
+      '#title' => 'Use the Contact Email as the Author Default Email',
+      '#default_value' => $metadata->getContactEmailForAuthorPermission(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_author]"]' => ['checked' => TRUE],
+          ':input[name="intelligence_metadata[use_contact_email]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['default_author_email'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Default Author Email'),
+      '#description' => $this->t('Only used if the Author does not have an email address'),
+      '#default_value' => $metadata->getDefaultAuthorEmail(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_author]"]' => ['checked' => TRUE],
+          ':input[name="intelligence_metadata[use_author_email]"]' => ['checked' => TRUE],
+          ':input[name="intelligence_metadata[use_contact_email_for_author]"]' => ['checked' => FALSE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_business_unit'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Business Unit to be tracked',
+      '#default_value' => $metadata->getBusinessUnitPermission(),
+    ];
+
+    $form['intelligence_metadata']['business_unit'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Business Unit'),
+      '#default_value' => $metadata->getBusinessUnit(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_business_unit]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_business_division'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Business Division to be tracked',
+      '#default_value' => $metadata->getBusinessDivisionPermission(),
+    ];
+
+    $form['intelligence_metadata']['business_division'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Business Division'),
+      '#default_value' => $metadata->getBusinessDivision(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_business_division]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_campaign_id'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Campaign ID to be tracked',
+      '#default_value' => $metadata->getCampaignIdPermission(),
+    ];
+
+    $form['intelligence_metadata']['campaign_id'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Campaign Id'),
+      '#default_value' => $metadata->getCampaignId(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_campaign_id]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_campaign_rating'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Campaign Rating to be tracked',
+      '#default_value' => $metadata->getCampaignRatingPermission(),
+    ];
+
+    $form['intelligence_metadata']['campaign_rating'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'number',
+      '#title' => $this->t('Campaign Rating'),
+      '#default_value' => $metadata->getCampaignRating(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_campaign_rating]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_channel'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Channel to be tracked',
+      '#default_value' => $metadata->getChannelPermission(),
+    ];
+
+    $form['intelligence_metadata']['channel'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Channel'),
+      '#default_value' => $metadata->getChannel(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_channel]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_contact_name'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Contact Name to be tracked',
+      '#default_value' => $metadata->getContactNamePermission(),
+    ];
+
+    $form['intelligence_metadata']['contact_name'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Contact Name'),
+      '#default_value' => $metadata->getContactName(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_contact_name]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_contact_email'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Contact Email to be tracked',
+      '#default_value' => $metadata->getContactEmailPermission(),
+    ];
+
+    $form['intelligence_metadata']['contact_email'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Contact Email'),
+      '#default_value' => $metadata->getContactEmail(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_contact_email]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_content_description'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Content Description to be tracked',
+      '#default_value' => $metadata->getContentDescriptionPermission(),
+    ];
+
+    $form['intelligence_metadata']['content_description'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Content Description'),
+      '#default_value' => $metadata->getContentDescription(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_content_description]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_base_domain'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Base Domain to be tracked',
+      '#default_value' => $metadata->getBaseDomainPermission(),
+      '#description' => 'This value will be pulled from the entities location and cannot be edited',
+    ];
+
+    $form['intelligence_metadata']['use_reference_url'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Reference URL to be tracked',
+      '#default_value' => $metadata->getReferenceUrlPermission(),
+      '#description' => 'This value will be pulled from the entities location and cannot be edited',
+    ];
+
+    $form['intelligence_metadata']['use_external_style_id'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the External Style ID to be tracked',
+      '#default_value' => $metadata->getExternalStyleIdPermission(),
+    ];
+
+    $form['intelligence_metadata']['external_style_id'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('External Style Id'),
+      '#default_value' => $metadata->getExternalStyleId(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_external_style_id]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_purchase_order'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Purchase Order to be tracked',
+      '#default_value' => $metadata->getPurchaseOrderPermission(),
+    ];
+
+    $form['intelligence_metadata']['purchase_order'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Purchase Order'),
+      '#default_value' => $metadata->getPurchaseOrder(),
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_purchase_order]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+
+    $form['intelligence_metadata']['use_region'] = [
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Region to be tracked',
+      '#default_value' => $metadata->getRegionPermission(),
+    ];
+
+    $form['intelligence_metadata']['region'] = [
+      '#attributes' => ['class' => ['indent-form-item']],
+      '#type' => 'select',
+      '#title' => $this->t('Region'),
+      '#options' => ['region1' => 'Region 1', 'region2' => 'Region 2', 'region3' => 'Region 3'],
+      '#default_value' => $metadata->getRegion() ?: 'region1',
+      '#states' => [
+        'visible' => [
+          ':input[name="intelligence_metadata[use_region]"]' => ['checked' => TRUE],
+        ],
+      ],
+    ];
+    $form['intelligence_metadata']['actions'] = ['#type' => 'actions'];
+    $form['intelligence_metadata']['actions']['submit'] = [
+      '#type' => 'submit',
+      '#value' => $this->t('Save Lingotek Intelligence Metadata'),
+      '#button_type' => 'primary',
+    ];
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $metadata = $this->getIntelligenceMetadata($form_state);
+    $metadata->setAuthorPermission($form_state->getValue(['intelligence_metadata', 'use_author']));
+    $metadata->setAuthorEmailPermission($form_state->getValue(['intelligence_metadata', 'use_author_email']));
+    $metadata->setContactEmailForAuthorPermission($form_state->getValue(['intelligence_metadata', 'use_contact_email_for_author']));
+    $metadata->setDefaultAuthorEmail($form_state->getValue(['intelligence_metadata', 'default_author_email']));
+    $metadata->setBusinessUnitPermission($form_state->getValue(['intelligence_metadata', 'use_business_unit']));
+    $metadata->setBusinessUnit($form_state->getValue(['intelligence_metadata', 'business_unit']));
+    $metadata->setBusinessDivisionPermission($form_state->getValue(['intelligence_metadata', 'use_business_division']));
+    $metadata->setBusinessDivision($form_state->getValue(['intelligence_metadata', 'business_division']));
+    $metadata->setCampaignIdPermission($form_state->getValue(['intelligence_metadata', 'use_campaign_id']));
+    $metadata->setCampaignId($form_state->getValue(['intelligence_metadata', 'campaign_id']));
+    $metadata->setCampaignRatingPermission($form_state->getValue(['intelligence_metadata', 'use_campaign_rating']));
+    $metadata->setCampaignRating($form_state->getValue(['intelligence_metadata', 'campaign_rating']));
+    $metadata->setChannelPermission($form_state->getValue(['intelligence_metadata', 'use_channel']));
+    $metadata->setChannel($form_state->getValue(['intelligence_metadata', 'channel']));
+    $metadata->setContactNamePermission($form_state->getValue(['intelligence_metadata', 'use_contact_name']));
+    $metadata->setContactName($form_state->getValue(['intelligence_metadata', 'contact_name']));
+    $metadata->setContactEmailPermission($form_state->getValue(['intelligence_metadata', 'use_contact_email']));
+    $metadata->setContactEmail($form_state->getValue(['intelligence_metadata', 'contact_email']));
+    $metadata->setContentDescriptionPermission($form_state->getValue(['intelligence_metadata', 'use_content_description']));
+    $metadata->setContentDescription($form_state->getValue(['intelligence_metadata', 'content_description']));
+    $metadata->setBaseDomainPermission($form_state->getValue(['intelligence_metadata', 'use_base_domain']));
+    $metadata->setReferenceUrlPermission($form_state->getValue(['intelligence_metadata', 'use_reference_url']));
+    $metadata->setExternalStyleIdPermission($form_state->getValue(['intelligence_metadata', 'use_external_style_id']));
+    $metadata->setExternalStyleId($form_state->getValue(['intelligence_metadata', 'external_style_id']));
+    $metadata->setPurchaseOrderPermission($form_state->getValue(['intelligence_metadata', 'use_purchase_order']));
+    $metadata->setPurchaseOrder($form_state->getValue(['intelligence_metadata', 'purchase_order']));
+    $metadata->setRegionPermission($form_state->getValue(['intelligence_metadata', 'use_region']));
+    $metadata->setRegion($form_state->getValue(['intelligence_metadata', 'region']));
+
+    drupal_set_message($this->t('Lingotek Intelligence Metadata saved correctly.'));
+  }
+
+  /**
+   * Helper method for getting the Lingotek intelligence metadata.
+   *
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The current state of the form.
+   *
+   * @return LingotekIntelligenceMetadataInterface
+   *   Returns the Lingotek intelligence metadata this form applies to.
+   */
+  protected function getIntelligenceMetadata(FormStateInterface $form_state) {
+    $buildInfo = $form_state->getBuildInfo();
+    return $buildInfo['args'][1];
+  }
+
+}
diff --git a/src/Form/LingotekProfileFormBase.php b/src/Form/LingotekProfileFormBase.php
index 37f4362..44790d6 100644
--- a/src/Form/LingotekProfileFormBase.php
+++ b/src/Form/LingotekProfileFormBase.php
@@ -140,6 +140,296 @@ class LingotekProfileFormBase extends EntityForm {
       '#default_value' => $profile->getWorkflow(),
     );
 
+    $form['content_metadata'] = array(
+      '#type' => 'details',
+      '#title' => $this->t('Content Metadata'),
+      '#tree' => TRUE,
+    );
+
+    $form['content_metadata']['use_author'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Content\'s Author name and email to be tracked',
+      '#default_value' => $profile->getAuthorPermission(),
+    );
+
+    $form['content_metadata']['use_author_email'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Content\'s Author name and email to be tracked',
+      '#default_value' => $profile->getAuthorEmailPermission(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_author]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_contact_email_for_author'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#type' => 'checkbox',
+      '#title' => 'Use the Contact Email as the Author Default Email',
+      '#default_value' => $profile->getContactEmailForAuthorPermission(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_author]"]' => array('checked' => TRUE),
+          ':input[name="content_metadata[use_contact_email]"]' => array('checked' => TRUE),
+        ),
+        'unchecked' => array(
+          ':input[name="content_metadata[use_contact_email]"]' => array('checked' => FALSE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['default_author_email'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'default_author_email',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Default Author Email'),
+      '#description' => $this->t('Only used if the Author does not have an email address'),
+      '#default_value' => $profile->getDefaultAuthorEmail(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_author]"]' => array('checked' => TRUE),
+          ':input[name="content_metadata[use_author_email]"]' => array('checked' => TRUE),
+          ':input[name="content_metadata[use_contact_email_for_author]"]' => array('checked' => FALSE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_business_unit'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Business Unit to be tracked',
+      '#default_value' => $profile->getBusinessUnitPermission(),
+    );
+
+    $form['content_metadata']['business_unit'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'business_unit',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Business Unit'),
+      '#default_value' => $profile->getBusinessUnit(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_business_unit]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_business_division'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Business Division to be tracked',
+      '#default_value' => $profile->getBusinessDivisionPermission(),
+    );
+
+    $form['content_metadata']['business_division'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'business_division',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Business Division'),
+      '#default_value' => $profile->getBusinessDivision(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_business_division]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_campaign_id'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Campaign ID to be tracked',
+      '#default_value' => $profile->getCampaignIdPermission(),
+    );
+
+    $form['content_metadata']['campaign_id'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'campaign_id',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Campaign Id'),
+      '#default_value' => $profile->getCampaignId(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_campaign_id]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_campaign_rating'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Campaign Rating to be tracked',
+      '#default_value' => $profile->getCampaignRatingPermission(),
+    );
+
+    $form['content_metadata']['campaign_rating'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'campaign_rating',
+      '#type' => 'number',
+      '#title' => $this->t('Campaign Rating'),
+      '#default_value' => $profile->getCampaignRating(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_campaign_rating]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_channel'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Channel to be tracked',
+      '#default_value' => $profile->getChannelPermission(),
+    );
+
+    $form['content_metadata']['channel'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'channel',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Channel'),
+      '#default_value' => $profile->getChannel(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_channel]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_contact_name'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Contact Name to be tracked',
+      '#default_value' => $profile->getContactNamePermission(),
+    );
+
+    $form['content_metadata']['contact_name'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'contact_name',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Contact Name'),
+      '#default_value' => $profile->getContactName(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_contact_name]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_contact_email'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Contact Email to be tracked',
+      '#default_value' => $profile->getContactEmailPermission(),
+    );
+
+    $form['content_metadata']['contact_email'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'contact_email',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Contact Email'),
+      '#default_value' => $profile->getContactEmail(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_contact_email]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_content_description'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Content Description to be tracked',
+      '#default_value' => $profile->getContentDescriptionPermission(),
+    );
+
+    $form['content_metadata']['content_description'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'content_description',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Content Description'),
+      '#default_value' => $profile->getContentDescription(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_content_description]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_base_domain'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Base Domain to be tracked',
+      '#default_value' => $profile->getBaseDomainPermission(),
+      '#description' => 'This value will be pulled from the entities location and cannot be edited',
+    );
+
+    $form['content_metadata']['use_reference_url'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Reference URL to be tracked',
+      '#default_value' => $profile->getReferenceUrlPermission(),
+      '#description' => 'This value will be pulled from the entities location and cannot be edited',
+    );
+
+    $form['content_metadata']['use_external_style_id'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the External Style ID to be tracked',
+      '#default_value' => $profile->getExternalStyleIdPermission(),
+    );
+
+    $form['content_metadata']['external_style_id'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'external_style_id',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('External Style Id'),
+      '#default_value' => $profile->getExternalStyleId(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_external_style_id]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_purchase_order'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Purchase Order to be tracked',
+      '#default_value' => $profile->getPurchaseOrderPermission(),
+    );
+
+    $form['content_metadata']['purchase_order'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'purchase_order',
+      '#type' => 'textfield',
+      '#size' => 20,
+      '#title' => $this->t('Purchase Order'),
+      '#default_value' => $profile->getPurchaseOrder(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_purchase_order]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
+    $form['content_metadata']['use_region'] = array(
+      '#type' => 'checkbox',
+      '#title' => 'Enable the Region to be tracked',
+      '#default_value' => $profile->getRegionPermission(),
+    );
+
+    $form['content_metadata']['region'] = array(
+      '#attributes' => array('class' => array('indent-form-item')),
+      '#id' => 'region',
+      '#type' => 'select',
+      '#title' => $this->t('Region'),
+      '#options' => ['region1' => 'Region 1', 'region2' => 'Region 2', 'region3' => 'Region 3'],
+      '#default_value' => $profile->getRegion(),
+      '#states' => array(
+        'visible' => array(
+          ':input[name="content_metadata[use_region]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
     $form['language_overrides'] = array(
       '#type' => 'details',
       '#title' => $this->t('Target language specific settings'),
@@ -193,4 +483,4 @@ class LingotekProfileFormBase extends EntityForm {
     return $form;
   }
 
-}
\ No newline at end of file
+}
diff --git a/src/Lingotek.php b/src/Lingotek.php
index a032388..3785780 100644
--- a/src/Lingotek.php
+++ b/src/Lingotek.php
@@ -167,6 +167,7 @@ class Lingotek implements LingotekInterface {
       'project_id' => $this->get('default.project'),
       'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',// 'okf_html@drupal8-subfilter.fprm',
       'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',// 'okf_json@with-html-subfilter.fprm',
+      'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0',
     );
 
     if ($profile !== NULL && $project = $profile->getProject()) {
@@ -187,6 +188,17 @@ class Lingotek implements LingotekInterface {
       }
     }
 
+    if ($profile !== NULL) {
+      $json_content = json_decode($content);
+      if (isset($json_content->_lingotek_metadata)) {
+        foreach ($json_content->_lingotek_metadata as $key => $val) {
+          if (substr($key,1,9) === 'api_data_'){
+            $defaults[substr($key,10)] = $val;
+          }
+        }
+      }
+    }
+
     $args = array_merge(array('content' => $content, 'title' => $title, 'locale_code' => $locale), $defaults);
     if ($url !== NULL) {
       $args['external_url'] = $url;
@@ -206,6 +218,7 @@ class Lingotek implements LingotekInterface {
       'content' => $content,
       'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',// 'okf_html@drupal8-subfilter.fprm',
       'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',// 'okf_json@with-html-subfilter.fprm',
+      'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0',
     );
     if ($url !== NULL) {
       $args['external_url'] = $url;
@@ -214,6 +227,15 @@ class Lingotek implements LingotekInterface {
       $args['title'] = $title;
     }
 
+    $json_content = json_decode($content);
+    if (isset($json_content->_lingotek_metadata)) {
+      foreach ($json_content->_lingotek_metadata as $key => $val) {
+        if (substr($key,0,9) === '_api_data_'){
+          $args[substr($key,10)] = $val;
+        }
+      }
+    }
+
     $response = $this->api->patchDocument($doc_id, $args);
     if ($response->getStatusCode() == Response::HTTP_ACCEPTED) {
       return TRUE;
diff --git a/src/LingotekContentTranslationService.php b/src/LingotekContentTranslationService.php
index 02a0617..b97f25e 100644
--- a/src/LingotekContentTranslationService.php
+++ b/src/LingotekContentTranslationService.php
@@ -522,12 +522,46 @@ class LingotekContentTranslationService implements LingotekContentTranslationSer
     }
     // Embed entity metadata if there is any.
     if ($entity->id()) {
-      $data['_lingotek_metadata'] =
-        [
-          '_entity_type_id' => $entity->getEntityTypeId(),
-          '_entity_id' => $entity->id(),
-          '_entity_revision' => $entity->getRevisionId(),
-        ];
+      if ($entity->lingotek_metadata && $entity->lingotek_metadata->entity) {
+        $profile = $this->lingotekConfiguration->getEntityProfile($entity);
+      } else {
+        $profile = NULL;
+      }
+      global $base_url;
+
+      $author_name = '';
+      $author_email = '';
+      if(method_exists($entity, 'getOwner')) {
+        $user = $entity->getOwner();
+        $author_name = $user->getDisplayName();
+        $author_email = $user->getEmail();
+      }
+
+      $has_profile = $profile !== NULL;
+
+      $data['_lingotek_metadata']['_entity_type_id'] = $entity->getEntityTypeId();
+      $data['_lingotek_metadata']['_entity_id'] = $entity->id();
+      $data['_lingotek_metadata']['_entity_revision'] = $entity->getRevisionId();
+      $data['_lingotek_metadata']['_api_data_external_document_id'] = $entity->id();
+      $data['_lingotek_metadata']['_api_data_content_type'] = $entity->getEntityTypeId();
+
+      //Check if we have permission to send these
+      if ($has_profile && $profile->getBaseDomainPermission()) $data['_lingotek_metadata']['_api_data_domain'] = $base_url;
+      if ($has_profile && $profile->getReferenceUrlPermission()) $data['_lingotek_metadata']['_api_data_reference_url'] = $entity->hasLinkTemplate('canonical') ? $entity->toUrl()->setAbsolute(TRUE)->toString() : NULL;
+      if ($has_profile && $profile->getAuthorPermission()) $data['_lingotek_metadata']['_api_data_author_name'] = $author_name;
+      if ($has_profile && $profile->getAuthorPermission() && $profile->getAuthorEmailPermission() && $profile->getContactEmailForAuthorPermission() && $profile->getContactEmailPermission()) $data['_lingotek_metadata']['_api_data_author_email'] = $profile->getContactEmail();
+      if ($has_profile && $profile->getAuthorPermission() && $profile->getAuthorEmailPermission() && (!$profile->getContactEmailForAuthorPermission() || !$profile->getContactEmailPermission())) $data['_lingotek_metadata']['_api_data_author_email'] = $author_email;
+      if ($has_profile && $profile->getBusinessUnitPermission()) $data['_lingotek_metadata']['_api_data_business_unit'] = $profile->getBusinessUnit();
+      if ($has_profile && $profile->getBusinessDivisionPermission()) $data['_lingotek_metadata']['_api_data_business_division'] = $profile->getBusinessDivision();
+      if ($has_profile && $profile->getCampaignIdPermission()) $data['_lingotek_metadata']['_api_data_campaign_id'] = $profile->getCampaignId();
+      if ($has_profile && $profile->getCampaignRatingPermission()) $data['_lingotek_metadata']['_api_data_campaign_rating'] = $profile->getCampaignRating();
+      if ($has_profile && $profile->getChannelPermission()) $data['_lingotek_metadata']['_api_data_channel'] = $profile->getChannel();
+      if ($has_profile && $profile->getContactNamePermission()) $data['_lingotek_metadata']['_api_data_contact_name'] = $profile->getContactName();
+      if ($has_profile && $profile->getContactEmailPermission()) $data['_lingotek_metadata']['_api_data_contact_email'] = $profile->getContactEmail();
+      if ($has_profile && $profile->getContentDescriptionPermission()) $data['_lingotek_metadata']['_api_data_content_description'] = $profile->getContentDescription();
+      if ($has_profile && $profile->getExternalStyleIdPermission()) $data['_lingotek_metadata']['_api_data_external_style_id'] = $profile->getExternalStyleId();
+      if ($has_profile && $profile->getPurchaseOrderPermission()) $data['_lingotek_metadata']['_api_data_purchase_order'] = $profile->getPurchaseOrder();
+      if ($has_profile && $profile->getRegionPermission()) $data['_lingotek_metadata']['_api_data_region'] = $profile->getRegion();
     }
     return $data;
   }
diff --git a/src/LingotekIntelligenceMetadataInterface.php b/src/LingotekIntelligenceMetadataInterface.php
new file mode 100644
index 0000000..2305699
--- /dev/null
+++ b/src/LingotekIntelligenceMetadataInterface.php
@@ -0,0 +1,528 @@
+<?php
+
+namespace Drupal\lingotek;
+
+/**
+ * Contract for any Lingotek Intelligence metadata provider.
+ *
+ * @package Drupal\lingotek
+ */
+interface LingotekIntelligenceMetadataInterface {
+
+  /**
+   * Gets the Business Unit associated with this content.
+   *
+   * @return string
+   *   The Business Unit.
+   */
+  public function getBusinessUnit();
+
+  /**
+   * Sets the Business Unit responsible for the content with this metadata.
+   * A business unit is a relatively autonomous division of a large company that
+   * operates as an independent enterprise with responsibility for a particular
+   * range of products or activities.
+   *
+   * Although, defined as such the user may define and use this field as best
+   * fits the situation.
+   *
+   * @param string $business_unit
+   *   The Business Unit.
+   *
+   * @return $this
+   */
+  public function setBusinessUnit($business_unit);
+
+  /**
+   * Gets the Business Division associated with this content.
+   *
+   * @return string
+   */
+  public function getBusinessDivision();
+
+  /**
+   * Set the Business Division responsible for the content with this metadata.
+   * A Business Division is defined as a discrete part of a company that may
+   * operate under the same name and legal responsibility or as a separate
+   * corporate and legal entity under another business name
+   *
+   * This may be used as best fits the needs of the user
+   *
+   * @param string $business_division
+   *   The Business Division.
+   *
+   * @return $this
+   */
+  public function setBusinessDivision($business_division);
+
+  /**
+   * Get the Campaign ID associated with this content.
+   *
+   * @return string
+   */
+  public function getCampaignId();
+
+  /**
+   * Set the Campaign ID associated with this content. The Campaign ID could be
+   * for a marketing or other campaign. This allows particular content to be
+   * associated with the campaign and then be able to see how a campaign is
+   * doing by only looking at content from the campaign.
+   *
+   * @param string $campaign_id
+   *   The Campaign ID.
+   *
+   * @return $this
+   */
+  public function setCampaignId($campaign_id);
+
+  /**
+   * Get the Campaign Rating associated with the content and the Campaign (which
+   * is represented by the Campaign ID).
+   *
+   * @return int
+   */
+  public function getCampaignRating();
+
+  /**
+   * Sets the Campaign Rating. The Campaign rating must be numeric, but can
+   * otherwise be used to rate the campaign and its effect on this content.
+   *
+   * @param int $campaign_rating
+   *   The Campaign Rating.
+   *
+   * @return $this
+   */
+  public function setCampaignRating($campaign_rating);
+
+  /**
+   * Gets the Channel associated with the content.
+   *
+   * @return string
+   */
+  public function getChannel();
+
+  /**
+   * Sets the Channel associated with the content. A channel is a way or outlet
+   * to market and sell products. This can be used to associate the content with
+   * a particular marketing channel.
+   *
+   * @param string $channel
+   *   The Channel.
+   *
+   * @return $this
+   */
+  public function setChannel($channel);
+
+  /**
+   * Gets the name of the contact responsible for this content.
+   *
+   * @return string
+   */
+  public function getContactName();
+
+  /**
+   * Sets the name of the person to contact in regards to this content.
+   *
+   * @param string $contact_name
+   *   The Contact Name.
+   *
+   * @return $this
+   */
+  public function setContactName($contact_name);
+
+  /**
+   * Gets the Contact Email for the Contact Person responsible for this content.
+   *
+   * @return string
+   */
+  public function getContactEmail();
+
+  /**
+   * Sets the Contact Email for the Contact Person responsible for this content.
+   *
+   * @param string $contact_email
+   *   The Contact Email.
+   *
+   * @return $this
+   */
+  public function setContactEmail($contact_email);
+
+  /**
+   * Gets the description of this content.
+   *
+   * @return string
+   */
+  public function getContentDescription();
+
+  /**
+   * Sets the description for this content.
+   *
+   * @param string $content_description
+   *   The Content Description.
+   *
+   * @return $this
+   */
+  public function setContentDescription($content_description);
+
+  /**
+   * Gets the Purchase Order.
+   *
+   * @return string
+   */
+  public function getPurchaseOrder();
+
+  /**
+   * Sets the Purchase Order associated with the purchase of the translation.
+   *
+   * @param string $purchase_order
+   *   The Purchase Order.
+   *
+   * @return $this
+   */
+  public function setPurchaseOrder($purchase_order);
+
+  /**
+   * Gets the External Style ID associated with this content.
+   *
+   * @return string
+   */
+  public function getExternalStyleId();
+
+  /**
+   * Sets the External Style ID that is associated with the marketing and style
+   * the content is using.
+   *
+   * @param string $external_style_id
+   *   The External Style ID.
+   *
+   * @return $this
+   */
+  public function setExternalStyleId($external_style_id);
+
+  /**
+   * Gets the Region the content is presented to.
+   *
+   * @return string
+   */
+  public function getRegion();
+
+  /**
+   * Sets the Region the content is meant for, presented to, or created in.
+   *
+   * @param string $region
+   *   The Region.
+   *Content Description
+   * @return $this
+   */
+  public function setRegion($region);
+
+  /**
+   * Gets the Permission setting for Author Permission.
+   *
+   * @return bool
+   */
+  public function getAuthorPermission();
+
+  /**
+   * Sets the Permission setting for whether or not the author information
+   * should be sent.
+   *
+   * @param bool $use_author
+   *   Flag indicating if the author should be used.
+   *
+   * @return $this
+   */
+  public function setAuthorPermission($use_author);
+
+  /**
+   * Gets the Default Author Email.
+   *
+   * @return bool
+   */
+  public function getDefaultAuthorEmail();
+
+  /**
+   * Sets the Default Author Email that should be used.
+   *
+   * @param string $default_author_email
+   *   The Default Author Email.
+   *
+   * @return $this
+   */
+  public function setDefaultAuthorEmail($default_author_email);
+
+  /**
+   * Gets the Permission setting for whether or not the Author Email should be
+   * sent.
+   *
+   * @return bool
+   */
+  public function getAuthorEmailPermission();
+
+  /**
+   * Sets the Permission setting for whether or not an Author Email should be
+   * used in the Intelligence Metadata.
+   *
+   * @param bool $use_author_email
+   *   Flag indicating if the author email should be used.
+   *
+   * @return $this
+   */
+  public function setAuthorEmailPermission($use_author_email);
+
+  /**
+   * Gets the Permission setting for whether or not to use the Contact Email
+   * as the author's email.
+   *
+   * @return bool
+   */
+  public function getContactEmailForAuthorPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to use the Contact Email
+   * as the author's email.
+   *
+   * @param bool $use_contact_email_for_author
+   *   Flag indicating if we want to use contact email as author if author
+   *   is not set.
+   *
+   * @return $this
+   */
+  public function setContactEmailForAuthorPermission($use_contact_email_for_author);
+
+  /**
+   * Gets the Permission setting for wheter or not to use the Business Unit.
+   *
+   * @return bool
+   */
+  public function getBusinessUnitPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to use the Business Unit.
+   *
+   * @param bool $use_business_unit
+   *   Flag indicating if we want to use a Business Unit.
+   *
+   * @return $this
+   */
+  public function setBusinessUnitPermission($use_business_unit);
+
+  /**
+   * Gets the Permission setting for whether or not to use the Business Division.
+   *
+   * @return bool
+   */
+  public function getBusinessDivisionPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to use the Business Division.
+   *
+   * @param bool $use_business_division
+   *   Flag indicating if we want to indicate the Business Division.
+   *
+   * @return $this
+   */
+  public function setBusinessDivisionPermission($use_business_division);
+
+  /**
+   * Gets the Permission setting for whether or not to use the Campaign Id.
+   *
+   * @return bool
+   */
+  public function getCampaignIdPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to use the Campaign Id.
+   *
+   * @param bool $use_campaign_id
+   *   Flag indicating if we want to indicate the Campaign ID.
+   *
+   * @return $this
+   */
+  public function setCampaignIdPermission($use_campaign_id);
+
+  /**
+   * Gets the Permission setting for whether or not the Campaign Rating should
+   * be used and tracked.
+   *
+   * @return bool
+   */
+  public function getCampaignRatingPermission();
+
+  /**
+   * Sets the Permission setting for whether or not the Campaign Rating should
+   * be used and tracked.
+   *
+   * @param bool $use_campaign_rating
+   *   Flag indicating if we want to indicate the Campaign Rating.
+   *
+   * @return $this
+   */
+  public function setCampaignRatingPermission($use_campaign_rating);
+
+  /**
+   * Gets the Permission setting for whether or not the Channel should be used
+   * and tracked.
+   *
+   * @return bool
+   */
+  public function getChannelPermission();
+
+  /**
+   * Sets the Permission setting for whether or not the Channel should be used
+   * and tracked.
+   *
+   * @param bool $use_channel
+   *   Flag indicating if we want to indicate the Channel.
+   *
+   * @return $this
+   */
+  public function setChannelPermission($use_channel);
+
+  /**
+   * Gets the Permission setting for whether or not to include the Contact Name.
+   *
+   * @return bool
+   */
+  public function getContactNamePermission();
+
+  /**
+   * Sets the Permission setting for whether or not to include the Contact Name.
+   *
+   * @param bool $use_contact_name
+   *   Flag indicating if we want to indicate the Contact Name.
+   *
+   * @return $this
+   */
+  public function setContactNamePermission($use_contact_name);
+
+  /**
+   * Gets the Permission setting for whether or not to include the Contact Email.
+   *
+   * @return bool
+   */
+  public function getContactEmailPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to include the Contact Email.
+   *
+   * @param bool $use_contact_email
+   *   Flag indicating if we want to indicate the Contact Email.
+   *
+   * @return $this
+   */
+  public function setContactEmailPermission($use_contact_email);
+
+  /**
+   * Gets the Permission setting for whether or not to include the Content
+   * Description.
+   *
+   * @return bool
+   */
+  public function getContentDescriptionPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to include the Content
+   * Description.
+   *
+   * @param bool $use_content_description
+   *   Flag indicating if we want to indicate the Content Description.
+   *
+   * @return $this
+   */
+  public function setContentDescriptionPermission($use_content_description);
+
+  /**
+   * Gets the Permission setting for whether or not to include the External
+   * Style Id.
+   *
+   * @return bool
+   */
+  public function getExternalStyleIdPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to include the External
+   * Style Id.
+   *
+   * @param bool $use_external_style_id
+   *   Flag indicating if we want to indicate the External Style ID.
+   *
+   * @return $this
+   */
+  public function setExternalStyleIdPermission($use_external_style_id);
+
+  /**
+   * Gets the Permission setting for whether or not to include the Purchase
+   * Order.
+   *
+   * @return bool
+   */
+  public function getPurchaseOrderPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to include the Purchase
+   * Order.
+   *
+   * @param bool $use_purchase_order
+   *   Flag indicating if we want to indicate the Purchase Order.
+   *
+   * @return $this
+   */
+  public function setPurchaseOrderPermission($use_purchase_order);
+
+  /**
+   * Gets the Permission setting for whether or not to include the Region.
+   *
+   * @return bool
+   */
+  public function getRegionPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to include the Region.
+   *
+   * @param bool $use_region
+   *   Flag indicating if we want to indicate the Region.
+   *
+   * @return $this
+   */
+  public function setRegionPermission($use_region);
+
+  /**
+   * Gets the Permission setting for whether or not to include the Base Domain
+   * in the metadata.
+   *
+   * @return bool
+   */
+  public function getBaseDomainPermission();
+
+  /**
+   * Sets the Permission setting for whether or not to include the Base Domain
+   * in the metadata.
+   *
+   * @param bool $use_base_domain
+   *   Flag indicating if we want to indicate the Base Domain.
+   *
+   * @return $this
+   */
+  public function setBaseDomainPermission($use_base_domain);
+
+  /**
+   * Gets the Permission setting for whether or not the Reference URL for this
+   * content should be included in the metadata.
+   *
+   * @return bool
+   */
+  public function getReferenceUrlPermission();
+
+  /**
+   * Sets the Permission setting for whether or not the Reference URL for this
+   * content should be included in the metadata.
+   * 
+   * @param bool $use_reference_url
+   *   Flag indicating if we want to indicate the Reference URL.
+   *
+   * @return $this
+   */
+  public function setReferenceUrlPermission($use_reference_url);
+
+}
diff --git a/src/LingotekIntelligenceService.php b/src/LingotekIntelligenceService.php
new file mode 100644
index 0000000..c9f5cfb
--- /dev/null
+++ b/src/LingotekIntelligenceService.php
@@ -0,0 +1,490 @@
+<?php
+
+namespace Drupal\lingotek;
+
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Service for managing Lingotek Intelligence related configuration.
+ *
+ * @package Drupal\lingotek
+ */
+class LingotekIntelligenceService implements LingotekIntelligenceMetadataInterface, ContainerInjectionInterface {
+
+  /**
+   * The configuration factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
+  /**
+   * Constructs a LingotekIntelligenceService object.
+   *
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The factory for configuration objects.
+   */
+  public function __construct(ConfigFactoryInterface $config_factory) {
+    $this->configFactory = $config_factory;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('config.factory')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBusinessUnit() {
+    return $this->getValue('business_unit');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBusinessUnit($business_unit) {
+    return $this->setValue('business_unit', $business_unit);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBusinessDivision() {
+    return $this->getValue('business_division');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBusinessDivision($business_division) {
+    return $this->setValue('business_division', $business_division);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCampaignId() {
+    return $this->getValue('campaign_id');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCampaignId($campaign_id) {
+    return $this->setValue('campaign_id', $campaign_id);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCampaignRating() {
+    return $this->getValue('campaign_rating');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCampaignRating($campaign_rating) {
+    return $this->setValue('campaign_rating', $campaign_rating);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getChannel() {
+    return $this->getValue('channel');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setChannel($channel) {
+    return $this->setValue('channel', $channel);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactName() {
+    return $this->getValue('contact_name');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactName($contact_name) {
+    return $this->setValue('contact_name', $contact_name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactEmail() {
+    return $this->getValue('contact_email');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactEmail($contact_email) {
+    return $this->setValue('contact_email', $contact_email);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContentDescription() {
+    return $this->getValue('content_description');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContentDescription($content_description) {
+    return $this->setValue('content_description', $content_description);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPurchaseOrder() {
+    return $this->getValue('purchase_order');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setPurchaseOrder($purchase_order) {
+    return $this->setValue('purchase_order', $purchase_order);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getExternalStyleId() {
+    return $this->getValue('external_style_id');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setExternalStyleId($external_style_id) {
+    return $this->setValue('external_style_id', $external_style_id);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRegion() {
+    return $this->getValue('region');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setRegion($region) {
+    return $this->setValue('region', $region);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAuthorPermission() {
+    $value = NULL;
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_author');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAuthorPermission($use_author) {
+    return $this->setValue('use_author', $use_author);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDefaultAuthorEmail() {
+    $value = NULL;
+    $config = $this->configFactory->get('lingotek.settings');
+    if ($config->get('intelligence.use_author_email')) {
+      $value = $config->get('intelligence.default_author_email');
+    }
+    return $value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setDefaultAuthorEmail($default_author_email) {
+    return $this->setValue('default_author_email', $default_author_email);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getAuthorEmailPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_author_email');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setAuthorEmailPermission($use_author_email) {
+    return $this->setValue('use_author_email', $use_author_email);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactEmailForAuthorPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_contact_email_for_author');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactEmailForAuthorPermission($use_contact_email_for_author) {
+    return $this->setValue('use_contact_email_for_author', $use_contact_email_for_author);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBusinessUnitPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_business_unit');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBusinessUnitPermission($use_business_unit) {
+    return $this->setValue('use_business_unit', $use_business_unit);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBusinessDivisionPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_business_division');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBusinessDivisionPermission($use_business_division) {
+    return $this->setValue('use_business_division', $use_business_division);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCampaignIdPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_campaign_id');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCampaignIdPermission($use_campaign_id) {
+    return $this->setValue('use_campaign_id', $use_campaign_id);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCampaignRatingPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_campaign_rating');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setCampaignRatingPermission($use_campaign_rating) {
+    return $this->setValue('use_campaign_rating', $use_campaign_rating);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getChannelPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_channel');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setChannelPermission($use_channel) {
+    return $this->setValue('use_channel', $use_channel);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactNamePermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_contact_name');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactNamePermission($use_contact_name) {
+    return $this->setValue('use_contact_name', $use_contact_name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContactEmailPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_contact_email');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContactEmailPermission($use_contact_email) {
+    return $this->setValue('use_contact_email', $use_contact_email);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContentDescriptionPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_content_description');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setContentDescriptionPermission($use_content_description) {
+    return $this->setValue('use_content_description', $use_content_description);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getExternalStyleIdPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_external_style_id');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setExternalStyleIdPermission($use_external_style_id) {
+    return $this->setValue('use_external_style_id', $use_external_style_id);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getPurchaseOrderPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_purchase_order');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setPurchaseOrderPermission($use_purchase_order) {
+    return $this->setValue('use_purchase_order', $use_purchase_order);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRegionPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_region');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setRegionPermission($use_region) {
+    return $this->setValue('use_region', $use_region);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseDomainPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_base_domain');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setBaseDomainPermission($use_base_domain) {
+    return $this->setValue('use_base_domain', $use_base_domain);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getReferenceUrlPermission() {
+    $config = $this->configFactory->get('lingotek.settings');
+    return $config->get('intelligence.use_reference_url');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setReferenceUrlPermission($use_reference_url) {
+    return $this->setValue('use_reference_url', $use_reference_url);
+  }
+
+  /**
+   * Helper for getting a value from config, validating that the usage is set.
+   *
+   * @param string $key
+   *   The key.
+   *
+   * @return array|mixed|null
+   */
+  protected function getValue($key) {
+    $value = NULL;
+    $config = $this->configFactory->get('lingotek.settings');
+    if ($config->get('intelligence.use_' . $key)) {
+      $value = $config->get('intelligence.' . $key);
+    }
+    return $value;
+  }
+
+  /**
+   * Helper for setting a value to config.
+   *
+   * @param string $key
+   *   The key.
+   * @param $value
+   *   The value.
+   *
+   * @return $this
+   */
+  protected function setValue($key, $value) {
+    $config = $this->configFactory->getEditable('lingotek.settings');
+    $config->set('intelligence.' . $key, $value);
+    $config->save();
+    return $this;
+  }
+
+}
diff --git a/src/Tests/Form/LingotekSettingsTabIntelligenceMetadataFormTest.php b/src/Tests/Form/LingotekSettingsTabIntelligenceMetadataFormTest.php
new file mode 100644
index 0000000..17da973
--- /dev/null
+++ b/src/Tests/Form/LingotekSettingsTabIntelligenceMetadataFormTest.php
@@ -0,0 +1,154 @@
+<?php
+
+namespace Drupal\lingotek\Tests\Form;
+
+use Drupal\lingotek\Tests\LingotekTestBase;
+
+/**
+ * Tests the Lingotek intelligence metadata settings form.
+ *
+ * @group lingotek
+ */
+class LingotekSettingsTabIntelligenceMetadataFormTest extends LingotekTestBase {
+
+  /**
+   * Test intelligence metadata is saved.
+   */
+  public function testIntelligenceMetadataIsSaved() {
+    $this->drupalGet('admin/lingotek/settings');
+
+    $this->assertRaw('<summary role="button" aria-controls="edit-intelligence-metadata" aria-expanded="false" aria-pressed="false">Lingotek Intelligence Metadata</summary>',
+      'Lingotek Intelligence Metadata tab is present.');
+
+    // Assert defaults are correct.
+    $this->assertFieldDefaults();
+
+    // Check we can store the values.
+    $edit = [
+      'intelligence_metadata[use_author]' => 1,
+      'intelligence_metadata[use_author_email]' => 1,
+      'intelligence_metadata[use_contact_email_for_author]' => FALSE,
+      'intelligence_metadata[use_business_unit]' => 1,
+      'intelligence_metadata[use_business_division]' => 1,
+      'intelligence_metadata[use_campaign_id]' => 1,
+      'intelligence_metadata[use_campaign_rating]' => 1,
+      'intelligence_metadata[use_channel]' => 1,
+      'intelligence_metadata[use_contact_name]' => 1,
+      'intelligence_metadata[use_contact_email]' => 1,
+      'intelligence_metadata[use_content_description]' => 1,
+      'intelligence_metadata[use_external_style_id]' => 1,
+      'intelligence_metadata[use_purchase_order]' => 1,
+      'intelligence_metadata[use_region]' => 1,
+      'intelligence_metadata[use_base_domain]' => 1,
+      'intelligence_metadata[use_reference_url]' => 1,
+      'intelligence_metadata[default_author_email]' => 'test@example.com',
+      'intelligence_metadata[business_unit]' => 'Test Business Unit',
+      'intelligence_metadata[business_division]' => 'Test Business Division',
+      'intelligence_metadata[campaign_id]' => 'Campaign ID',
+      'intelligence_metadata[campaign_rating]' => 5,
+      'intelligence_metadata[channel]' => 'Channel Test',
+      'intelligence_metadata[contact_name]' => 'Test Contact Name',
+      'intelligence_metadata[contact_email]' => 'contact@example.com',
+      'intelligence_metadata[content_description]' => 'Content description',
+      'intelligence_metadata[external_style_id]' => 'my-style-id',
+      'intelligence_metadata[purchase_order]' => 'PO32',
+      'intelligence_metadata[region]' => 'region2',
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Save Lingotek Intelligence Metadata', [], [], 'lingotekintelligence-metadata-form');
+
+    $this->assertText('Lingotek Intelligence Metadata saved correctly.');
+
+    // The values shown are correct.
+    $this->assertNoFieldChecked('edit-intelligence-metadata-use-contact-email-for-author');
+    $this->assertFieldByName('intelligence_metadata[default_author_email]', 'test@example.com');
+    $this->assertFieldByName('intelligence_metadata[business_unit]', 'Test Business Unit');
+    $this->assertFieldByName('intelligence_metadata[business_division]', 'Test Business Division');
+    $this->assertFieldByName('intelligence_metadata[campaign_id]', 'Campaign ID');
+    $this->assertFieldByName('intelligence_metadata[campaign_rating]', 5);
+    $this->assertFieldByName('intelligence_metadata[channel]', 'Channel Test');
+    $this->assertFieldByName('intelligence_metadata[contact_name]', 'Test Contact Name');
+    $this->assertFieldByName('intelligence_metadata[contact_email]', 'contact@example.com');
+    $this->assertFieldByName('intelligence_metadata[content_description]', 'Content description');
+    $this->assertFieldByName('intelligence_metadata[external_style_id]', 'my-style-id');
+    $this->assertFieldByName('intelligence_metadata[purchase_order]', 'PO32');
+    $this->assertOptionSelected('edit-intelligence-metadata-region', 'region2');
+
+    /** @var \Drupal\lingotek\LingotekIntelligenceMetadataInterface $intelligence */
+    $intelligence = \Drupal::service('lingotek.intelligence');
+    $this->assertTrue($intelligence->getAuthorPermission());
+    $this->assertTrue($intelligence->getAuthorEmailPermission());
+    $this->assertFalse($intelligence->getContactEmailForAuthorPermission());
+    $this->assertTrue($intelligence->getBusinessUnitPermission());
+    $this->assertTrue($intelligence->getBusinessDivisionPermission());
+    $this->assertTrue($intelligence->getCampaignIdPermission());
+    $this->assertTrue($intelligence->getCampaignRatingPermission());
+    $this->assertTrue($intelligence->getChannelPermission());
+    $this->assertTrue($intelligence->getContactNamePermission());
+    $this->assertTrue($intelligence->getContactEmailPermission());
+    $this->assertTrue($intelligence->getContentDescriptionPermission());
+    $this->assertTrue($intelligence->getExternalStyleIdPermission());
+    $this->assertTrue($intelligence->getPurchaseOrderPermission());
+    $this->assertTrue($intelligence->getRegionPermission());
+    $this->assertTrue($intelligence->getBaseDomainPermission());
+    $this->assertTrue($intelligence->getReferenceUrlPermission());
+
+    $this->assertIdentical($intelligence->getDefaultAuthorEmail(), 'test@example.com');
+    $this->assertIdentical($intelligence->getBusinessUnit(), 'Test Business Unit');
+    $this->assertIdentical($intelligence->getBusinessDivision(), 'Test Business Division');
+    $this->assertIdentical($intelligence->getCampaignId(), 'Campaign ID');
+    $this->assertIdentical($intelligence->getCampaignRating(), 5);
+    $this->assertIdentical($intelligence->getChannel(), 'Channel Test');
+    $this->assertIdentical($intelligence->getContactName(), 'Test Contact Name');
+    $this->assertIdentical($intelligence->getContactEmail(), 'contact@example.com');
+    $this->assertIdentical($intelligence->getContentDescription(), 'Content description');
+    $this->assertIdentical($intelligence->getExternalStyleId(), 'my-style-id');
+    $this->assertIdentical($intelligence->getPurchaseOrder(), 'PO32');
+    $this->assertIdentical($intelligence->getRegion(), 'region2');
+  }
+
+  /**
+   * Assert field defaults are correct.
+   */
+  protected function assertFieldDefaults() {
+    $this->assertFieldChecked('edit-intelligence-metadata-use-author');
+    $this->assertFieldChecked('edit-intelligence-metadata-use-author-email');
+    $this->assertFieldChecked('edit-intelligence-metadata-use-contact-email-for-author');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-business-unit');
+    $this->assertFieldByName('intelligence_metadata[business_unit]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-business-division');
+    $this->assertFieldByName('intelligence_metadata[business_division]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-campaign-id');
+    $this->assertFieldByName('intelligence_metadata[campaign_id]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-campaign-rating');
+    $this->assertFieldByName('intelligence_metadata[campaign_rating]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-channel');
+    $this->assertFieldByName('intelligence_metadata[channel]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-contact-name');
+    $this->assertFieldByName('intelligence_metadata[contact_name]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-contact-email');
+    $this->assertFieldByName('intelligence_metadata[contact_email]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-content-description');
+    $this->assertFieldByName('intelligence_metadata[content_description]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-base-domain');
+    $this->assertNoFieldChecked('edit-intelligence-metadata-use-reference-url');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-external-style-id');
+    $this->assertFieldByName('intelligence_metadata[external_style_id]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-purchase-order');
+    $this->assertFieldByName('intelligence_metadata[purchase_order]', '');
+
+    $this->assertFieldChecked('edit-intelligence-metadata-use-region');
+    $this->assertOptionSelected('edit-intelligence-metadata-region', 'region1');
+  }
+
+}
diff --git a/tests/src/Unit/LingotekUnitTest.php b/tests/src/Unit/LingotekUnitTest.php
index a8e09ac..822eda2 100644
--- a/tests/src/Unit/LingotekUnitTest.php
+++ b/tests/src/Unit/LingotekUnitTest.php
@@ -276,7 +276,8 @@ class LingotekUnitTest extends UnitTestCase {
               'format' => 'JSON', 'project_id' => 'my_test_project',
               'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
               'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
-              'vault_id' => 'my_test_vault']);
+              'vault_id' => 'my_test_vault',
+              'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0']);
 
     // Vault id has changed.
     $this->api->expects($this->at(1))
@@ -285,7 +286,8 @@ class LingotekUnitTest extends UnitTestCase {
               'format' => 'JSON', 'project_id' => 'another_test_project',
               'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
               'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
-              'vault_id' => 'another_test_vault']);
+              'vault_id' => 'another_test_vault',
+              'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0']);
 
     // If there is a profile with default vault, it must be replaced.
     $this->api->expects($this->at(2))
@@ -294,7 +296,8 @@ class LingotekUnitTest extends UnitTestCase {
               'format' => 'JSON', 'project_id' => 'default_project',
               'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
               'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
-              'vault_id' => 'default_vault']);
+              'vault_id' => 'default_vault',
+              'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0']);
 
     // If there is no profile, vault should not be included.
     $this->api->expects($this->at(3))
@@ -303,6 +306,7 @@ class LingotekUnitTest extends UnitTestCase {
               'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
               'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
               'format' => 'JSON', 'project_id' => 'default_project',
+              'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0'
              ]);
 
     // If there is an url, it should be included.
@@ -311,7 +315,8 @@ class LingotekUnitTest extends UnitTestCase {
       ->with(['title' => 'title', 'content' => 'content', 'locale_code' => 'es',
         'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
         'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
-        'format' => 'JSON', 'project_id' => 'default_project', 'external_url' => 'http://example.com/node/1'
+        'format' => 'JSON', 'project_id' => 'default_project', 'external_url' => 'http://example.com/node/1',
+        'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0'
       ]);
 
     // If there is a profile using the project default workflow template vault,
@@ -322,6 +327,7 @@ class LingotekUnitTest extends UnitTestCase {
         'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
         'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
         'format' => 'JSON', 'project_id' => 'default_project',
+        'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0'
       ]);
 
 
@@ -373,6 +379,7 @@ class LingotekUnitTest extends UnitTestCase {
         'format' => 'JSON', 'content' => 'content',
         'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
         'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
+        'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0'
       ])
       ->will($this->returnValue($response));
 
@@ -383,6 +390,7 @@ class LingotekUnitTest extends UnitTestCase {
         'format' => 'JSON', 'content' => 'content', 'external_url' => 'http://example.com/node/1',
         'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
         'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
+        'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0'
       ])
       ->will($this->returnValue($response));
 
@@ -393,6 +401,7 @@ class LingotekUnitTest extends UnitTestCase {
         'format' => 'JSON', 'content' => 'content', 'title' => 'title',
         'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
         'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
+        'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0'
       ])
       ->will($this->returnValue($response));
 
@@ -403,6 +412,7 @@ class LingotekUnitTest extends UnitTestCase {
         'format' => 'JSON', 'content' => 'content', 'external_url' => 'http://example.com/node/1', 'title' => 'title',
         'fprm_subfilter_id' => '0e79f34d-f27b-4a0c-880e-cd9181a5d265',
         'fprm_id' => '4f91482b-5aa1-4a4a-a43f-712af7b39625',
+        'external_application_id' => 'e39e24c7-6c69-4126-946d-cf8fbff38ef0'
       ])
       ->will($this->returnValue($response));
 
