diff --git a/entityqueue.info b/entityqueue.info
index f530533..a2392a1 100644
--- a/entityqueue.info
+++ b/entityqueue.info
@@ -25,3 +25,6 @@ files[] = includes/views/entityqueue_handler_relationship_entityqueue.inc
 files[] = includes/views/entityqueue_handler_sort_position.inc
 files[] = includes/views/entityqueue_handler_argument_subqueue_id.inc
 files[] = includes/views/entityqueue_handler_filter_in_queue.inc
+
+; Rules integration.
+files[] = entityqueue.rules.inc
diff --git a/entityqueue.module b/entityqueue.module
index 953f7c2..c476aa1 100644
--- a/entityqueue.module
+++ b/entityqueue.module
@@ -1243,3 +1243,13 @@ function _entityqueue_set_breadcrumb($path = 'admin/structure/entityqueue/list')
   array_pop($breadcrumb);
   drupal_set_breadcrumb($breadcrumb);
 }
+
+/**
+ * Rules callback. Adds an entity to a subqueue.
+ */
+function entityqueue_add_to_subqueue($entity, $subqueue) {
+  $queue = entityqueue_queue_load($subqueue->queue);
+  $field_name = _entityqueue_get_target_field_name($queue->target_type);
+  $subqueue->{$field_name}[LANGUAGE_NONE][] = ['target_id' => $entity->id];
+  entityqueue_subqueue_save($subqueue);
+}
diff --git a/entityqueue.rules.inc b/entityqueue.rules.inc
new file mode 100644
index 0000000..990e1b2
--- /dev/null
+++ b/entityqueue.rules.inc
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * Implements hook_rules_action_info().
+ */
+function entityqueue_rules_action_info() {
+  $actions = array();
+  $actions['entityqueue_add_to_subqueue'] = array(
+    'label' => t('Add an entity to a subqueue'),
+    'parameter' => array(
+      'entity' => array(
+        'label' => t('Entity'),
+        'type' => 'entity',
+        'description' => t('The entity to add to the Subqueue.'),
+        'wrapped' => FALSE,
+      ),
+      'subqueue' => array(
+        'type' => 'entityqueue_subqueue',
+        'label' => t('Subqueue'),
+        'default value' => FALSE,
+        'options list' => 'entityqueue_rules_subqueues_list',
+        'description' => t('Select the Subqueue to add this Entity.'),
+      ),
+    ),
+    'group' => t('Entityqueue'),
+    'access callback' => 'entityqueue_queue_access',
+  );
+  return $actions;
+}
+
+/**
+ * Returns a list of Queues for Rules.
+ */
+function entityqueue_rules_queues_list() {
+  $queues = entityqueue_queue_load_multiple();
+  $options = [];
+  foreach ($queues as $id => $queue) {
+    $options[$id] = $queue->label;
+  }
+  return $options;
+}
+
+/**
+ * Returns a list of subqueues for Rules, queued by subqueue_id
+ */
+function entityqueue_rules_subqueues_list() {
+  $options = [];
+  $subqueues = entityqueue_subqueue_load_multiple();
+
+  if (!empty($subqueues)) {
+    foreach ($subqueues as $id => $subqueue) {
+      $options[$subqueue->subqueue_id] = $subqueue->label;
+    }
+  }
+  return $options;
+}
