Question: How can I get Bitcoin receive notifications with Bitcoin Core. I have tried the `walletnotify` and `blocknotify` options. `walletnotify` is fired two times when I send or receive bitcoins. And with `blocknotify` I have to perform below task to detect which account of the wallet has received bitcoin.

* Run `getBlock` command to get all transaction hash
* Run a for loop for each transaction hash to run `getTransaction` command
* If transaction hash belong to my wallet account, I save the receive transaction in my database.

Using `blocknotify` seems to be inefficient as it involves lots of RPC calls per transaction.

`walletnofity` executes twice for bitcoin send and receive.

I have also tried `ZMQ` but I got a response which is difficult to convert into desirable format.

So could anybody suggest some efficient way to get a bitcoin receive notification upon first confirmation?

Answer: 
`walletnotify` executes once per every unconfirmed transaction creation (incoming/outgoing) and once more once the transaction is mined into a block (gets it's first confirmation).

I am not sure what are you developing, but as far as I see it both notifications are essential:
The first one to let the customer know that his transaction had been recorded, and the second to know that the value was indeed remitted, with enough fee, and will not be double spent.

For more info please review the official documentation.
<https://en.bitcoin.it/wiki/Running_Bitcoin>
Not sure if this will be efficient enough for you, but when walletnotify is called it can pass along the txid it was called with. Then whatever program is executed, from walletnotify can do something like a decoderawtransaction using that txid and see if the blockHash field is filled in, and confirmations>0.

You can also use some intermediary program to prevent the primary program from being called twice. For example in bitcoin.conf have walletnotify call to something like 'checkconfirmed.py' . checkonfirmed.py can do the decoderawtransaction opreration described above, and only if confirmed will it call out to "finalprogram.py".