While given answer works great, there are usually a variety of different methods to achieve your goals, one solution could be usage of a combination of [Views][1] and [Views Bulk Operation][2] modules to achieve that - Create a view containing nodes of your desired type - Add a contextual filter and limits results to nodes written by logged in user - add a VBO view mode - in rules you can load a VBO items ([check how][3]) - Now if array is empty, created node is the first node of that type which the user has submitted You also might do all the job with Rules, if you don't want this feature for many content types you can add a Boolean field to the user's account with default value of '**False**' indicating if user has written his/her first content of desired type, then on node submit event you can check this field to recognize if this post is his/her first post of that type or not. Remember to set this field to **True** after submission of first content of desired type. > The above approach saves some processing cause needs no query as it > calculated once and used many times You also can write a custom rules event ([API][4]), containing a query on nodes table with condition `node.uid == user->uid` and `node.type == "TYPE_MACHINE_NAME"`, then if query is not empty, that means user has already had submitted a content of that type. so return **False**. [1]: https://www.drupal.org/project/views [2]: https://www.drupal.org/project/views_bulk_operations [3]: https://drupalize.me/videos/using-vbo-load-list-objects-rules [4]: https://www.drupal.org/node/298522