how to catch when node is being promoted?
You can do it using hook_node_presave ...

Below is the code which works for me... Trick is here you need to make sure if node is new and promoted take action.. If node already promoted that means you are editing a node... You need to check whether original was unpromoted and after edit it is promoted then take action...

function YOURMODULENAME_node_presave($node) {
  if ($node-&gt;is_new &amp;&amp; $node-&gt;promote == 1) {
    drupal_set_message("NODE PROMOTED");
    // Take Some Action
  }
  else if ($node-&gt;promote == 1 &amp;&amp; $node-&gt;original-&gt;promote == 0){
    drupal_set_message("NODE PROMOTED");
    // Take some action
  }
}