diff --git a/modules/salesforce_pull/salesforce_pull.module b/modules/salesforce_pull/salesforce_pull.module
index 6d0bc26..e2c9f44 100644
--- a/modules/salesforce_pull/salesforce_pull.module
+++ b/modules/salesforce_pull/salesforce_pull.module
@@ -156,6 +156,13 @@ function salesforce_pull_process_records($sf_object) {
   foreach ($sf_mappings as $sf_mapping) {
     // Mapping object exists?
     $mapping_object = salesforce_mapping_object_load_by_sfid($sf_object['Id']);
+    // Trigger a hook to allow other modules to prevent this object from
+    // creating or updating an entity.
+    foreach (module_implements('salesforce_pull_allow_sf_object') as $module) {
+      if (module_invoke($module, 'salesforce_pull_allow_sf_object', $sf_object, $mapping_object, $sf_mapping) === FALSE) {
+        continue 2;
+      }
+    }
     $exists = $mapping_object ? TRUE : FALSE;
     if ($exists && ($sf_mapping->sync_triggers & SALESFORCE_MAPPING_SYNC_SF_UPDATE)) {
       try {
diff --git a/salesforce.api.php b/salesforce.api.php
index e2069da..697f659 100644
--- a/salesforce.api.php
+++ b/salesforce.api.php
@@ -85,6 +85,23 @@ function hook_salesforce_push_entity_allowed_by_mapping($entity_type, $entity, $
 }
 
 /**
+ * Prevent a pull from updating/creating an entity.
+ *
+ * @param array $sf_object
+ *   A Salesforce object array loaded during a pull.
+ * @param object $mapping_object
+ *   The mapping object for this SF Object, or FALSE if none exists.
+ * @param object $sf_mapping
+ *   The mapping that pulled this object in the first place.
+ *
+ * @return bool
+ *   FALSE if the entity should be ignored.
+ */
+function hook_salesforce_pull_allow_sf_object($sf_object, $mapping_object, $sf_mapping) {
+
+}
+
+/**
  * Alter the value being mapped to an entity property from a Salesforce object.
  *
  * @param string $value
