diff --git a/modules/salesforce_pull/salesforce_pull.module b/modules/salesforce_pull/salesforce_pull.module
index 524deb6..7ddd9f6 100644
--- a/modules/salesforce_pull/salesforce_pull.module
+++ b/modules/salesforce_pull/salesforce_pull.module
@@ -267,6 +267,13 @@ function salesforce_pull_get_updated_records() {
     if (!isset($results['errorCode'])) {
       // Write items to the queue.
       foreach ($results['records'] as $result) {
+        // Trigger a hook to allow other modules to prevent this
+        // entity/operation from triggering a sync with Drupal.
+        foreach (module_implements('salesforce_pull_record_allowed') as $module) {
+          if (module_invoke($module, 'salesforce_pull_record_allowed', $result) === FALSE) {
+            continue 2;
+          }
+        }
         $queue->createItem($result);
       }
 
@@ -279,6 +286,13 @@ function salesforce_pull_get_updated_records() {
         if (!isset($new_result['errorCode'])) {
           // Write items to the queue.
           foreach ($new_result['records'] as $result) {
+            // Trigger a hook to allow other modules to prevent this
+            // entity/operation from triggering a sync with Drupal.
+            foreach (module_implements('salesforce_pull_record_allowed') as $module) {
+              if (module_invoke($module, 'salesforce_pull_record_allowed', $result) === FALSE) {
+                continue 2;
+              }
+            }
             $queue->createItem($result);
           }
         }
@@ -344,6 +358,14 @@ function salesforce_pull_process_records($sf_object) {
             // Set fields values on the Drupal entity.
             salesforce_pull_map_fields($sf_mapping->field_mappings, $wrapper, $sf_object);
 
+            // Trigger a hook to allow other modules to prevent this entity from
+            // from being saved in Drupal.
+            foreach (module_implements('salesforce_pull_entity_allowed') as $module) {
+              if (module_invoke($module, 'salesforce_pull_entity_allowed', $sf_mapping->drupal_entity_type, $wrapper, $sf_object, $sf_mapping) === FALSE) {
+                continue 2;
+              }
+            }
+
             // Allow modules to react just prior to entity save.
             module_invoke_all('salesforce_pull_entity_presave', $wrapper->value(), $sf_object, $sf_mapping);
 
@@ -433,6 +455,14 @@ function salesforce_pull_process_records($sf_object) {
 
         salesforce_pull_map_fields($sf_mapping->field_mappings, $wrapper, $sf_object);
 
+        // Trigger a hook to allow other modules to prevent this entity from
+        // from being saved in Drupal.
+        foreach (module_implements('salesforce_pull_entity_allowed') as $module) {
+          if (module_invoke($module, 'salesforce_pull_entity_allowed', $sf_mapping->drupal_entity_type, $wrapper, $sf_object, $sf_mapping) === FALSE) {
+            continue 2;
+          }
+        }
+
         // Allow modules to react just prior to entity save.
         module_invoke_all('salesforce_pull_entity_presave', $wrapper->value(), $sf_object, $sf_mapping);
 
diff --git a/salesforce.api.php b/salesforce.api.php
index 89f7405..d9e73cf 100644
--- a/salesforce.api.php
+++ b/salesforce.api.php
@@ -177,6 +177,46 @@ function hook_salesforce_pull_entity_value_alter(&$value, $field_map, $sf_object
 
 }
 
+/**
+ * Prevent a Salesforce object from being added to the pull queue. For example, 
+ * prevent pull of Contacts without email address.
+ *
+ * @param array $result
+ *   A single Salesforce record as returned by SOQL pull query.
+ *
+ * @return bool
+ *   FALSE if the object should not be pulled from Salesforce.
+ */
+function hook_salesforce_pull_record_allowed($result) {
+  // Don't pull any Contact records without email, or with example.com address.
+  if ($result['attributes']['type'] == 'Contact'
+  && (empty($result['Email']) || strpos($result['Email'], 'example.com'))) {
+    return FALSE;
+  }
+}
+
+/**
+ * Skip processing of a Salesforce pull queue item.
+ * For example, never pull to user 1.
+ *
+ * @param string $drupal_entity_type
+ *   The entity type of the existing or new mapped Drupal entity.
+ * @param EntityMetadataWrapper $entity_wrapper
+ *   Entity wrapper for the mapped Drupal entity. 
+ * @param array $sf_object
+ *   The pulled Salesforce record, as claimed from the pull queue.
+ * @param SalesforceMapping $sf_mapping
+ *   Mapping object for this pull operation.
+ *
+ * @return bool
+ *   FALSE if the queue item should be skipped, and the pull ignored.
+ */
+function hook_salesforce_pull_entity_allowed($drupal_entity_type, $entity_wrapper, $sf_object, $sf_mapping) {
+  if ($drupal_entity_type == 'user' && $entity_wrapper->getIdentifier() == 1) {
+    return FALSE;
+  }
+}
+
 /**
  * Alter a SOQL select query before it is executed. For example, filter
  * target SObjects by a date value, or add an additional field to the query.
