Embed unique custom form in all rows of a view I want to create a custom form that will be embedded on each row for visitor to submit an email for that specific row. 

I suppose I have to create a custom form (which I have done before) but how do I embed it on each row ?  hook_views_data_alter(array &amp;$data) is the right way ?

Other questions (but not that important) are how do I make it unique (know which row the user has submitted) ? Another requirement is to be submitted without reload of whole page (ajaxy form).
That's a lot questions in one post. Two things may help you:

First, if you have more than one instance of a form on one page, you need different formIds. So implement the getFormId with a variable, like so:

public function getFormId() {
    return "mysuper_form-".$this-&gt;whatEverCounter;
}


Then, you will need to create your form yourself with the constructor (cause you need your state to be set from outside) and pass that instance to the formBuilder, for example like so

$idForm = new myForm($whatEverCounter);
$form = \Drupal::formBuilder()-&gt;getForm($idForm);


Second, for the "each row" topic:
If you really have one form per row, you will have one submit per row also - no problem. Or, you have one form with one element per row. Then just enumerate your elements like so:

public function buildForm(array $form, FormStateInterface $form_state) {
    foreach ($ems as $e) {
       $form['toggle'.$e] = []
    ]


If you need an ajax submit callback, use the '#ajax' attribute, like so:

'#ajax' =&gt; array(
        // Function to call when event on form element triggered.
        'callback' =&gt; [$this, 'toggleButtonPress'],
        // Effect when replacing content. Options: 'none' (default), 'slide', 'fade'.
        'effect' =&gt; 'fade',
        // Javascript event to trigger Ajax. 
        'event' =&gt; 'click',
        'progress' =&gt; array(
        // Graphic shown to indicate ajax. Options: 'throbber' (default), 'bar'.
        'type' =&gt; 'throbber',
        // Message to show along progress graphic. Default: 'Please wait...'.
        'message' =&gt; NULL,
        ),