diff --git a/includes/callback_node_status.inc b/includes/callback_node_status.inc
new file mode 100644
index 0000000..bfe35e2
--- /dev/null
+++ b/includes/callback_node_status.inc
@@ -0,0 +1,45 @@
+<?php
+
+/**
+ * @file
+ * Contains the SearchApiAlterNodeStatus class.
+ */
+
+/**
+ * Exclude unpublished nodes from node indexes.
+ */
+class SearchApiAlterNodeStatus extends SearchApiAbstractAlterCallback {
+
+  /**
+   * Check whether this data-alter callback is applicable for a certain index.
+   *
+   * Returns TRUE only for indexes on nodes.
+   *
+   * @param SearchApiIndex $index
+   *   The index to check for.
+   *
+   * @return boolean
+   *   TRUE if the callback can run on the given index; FALSE otherwise.
+   */
+  public function supportsIndex(SearchApiIndex $index) {
+    return $index->item_type === 'node';
+  }
+
+  /**
+   * Alter items before indexing.
+   *
+   * Items which are removed from the array won't be indexed, but will be marked
+   * as clean for future indexing.
+   *
+   * @param array $items
+   *   An array of items to be altered, keyed by item IDs.
+   */
+  public function alterItems(array &$items) {
+    foreach ($items as $nid => &$item) {
+      if (empty($item->status)) {
+        unset($items[$nid]);
+      }
+    }
+  }
+
+}
diff --git a/search_api.info b/search_api.info
index f5885cb..5654629 100644
--- a/search_api.info
+++ b/search_api.info
@@ -1,4 +1,3 @@
-
 name = Search API
 description = "Provides a generic API for modules offering search capabilites."
 dependencies[] = entity
@@ -14,6 +13,7 @@ files[] = includes/callback_add_viewed_entity.inc
 files[] = includes/callback_bundle_filter.inc
 files[] = includes/callback_language_control.inc
 files[] = includes/callback_node_access.inc
+files[] = includes/callback_node_status.inc
 files[] = includes/datasource.inc
 files[] = includes/datasource_entity.inc
 files[] = includes/datasource_external.inc
diff --git a/search_api.module b/search_api.module
index 97dab49..28575fc 100644
--- a/search_api.module
+++ b/search_api.module
@@ -755,6 +755,11 @@ function search_api_search_api_alter_callback_info() {
     'description' => t('Add node access information to the index.'),
     'class' => 'SearchApiAlterNodeAccess',
   );
+  $callbacks['search_api_alter_node_status'] = array(
+    'name' => t('Exclude unpublished nodes'),
+    'description' => t('Exclude unpublished nodes from the index.'),
+    'class' => 'SearchApiAlterNodeStatus',
+  );
 
   return $callbacks;
 }
